260 likes | 370 Vues
This session delves into the fundamentals of Java Collections, focusing on the Collection interface and its hierarchy. You'll explore practical use cases, such as the implementation of an Undoable Stack, and learn about various collection types like Vector, LinkedList, and TreeSet. Discover why collections are preferred over arrays, and gain an understanding of wrapper classes for handling primitive types. Through detailed examples and case studies, this session equips you with the essential knowledge and skills for effectively managing data in Java.
E N D
Outline Working with a Collection The Collection interface The Collection hierarchy Case Study: Undoable Stack The Collections class Wrapper classes
Collection A group of elements. The group size can be changed during run-time. • A collection object has many useful methods for manipulating the collection: • Inserting elements • Deleting elements • Copying the collection • Iterating over the elements • Computing subsets of elements • … Various types of collections are defined in the standard library: Vector, LinkedList, Stack, ArrayDequeue, PriorityQueue, TreeSet,…
Collection • Why shouldn’t we just use arrays? • Arrays are not objects! • You cannot invoke methods on arrays. • Arrays have fixed size. • Arrays are less convenient for representing certain types of collections: • Sets • Double-ended queues • Dictionaries • …
Working with a collection Definition syntax: Collection <type>colName = new Collection <type>() Example: import java.util.Vector; … Vector <Car> carsVec = new Vector <Car>(); Car Volvo = new Car(2.0); Car BMW = new Car(2.2); carsVec.add(Volvo); carsVec.add(BMW); for (Car c: carsVec) System.out.println(c);
Working with a collection Example - continued: Car temp = carsVec.elementAt(0); carsVec.set(0,carsVec.elementAt(1)); carsVec.set(1, temp); for (int i=0; i < carsVec.size(); i++) System.out.println(carsVec.elementAt(i));
The Collection Interface Collection is an interface in the standard java library. The Collection interface is generic. It accepts a type as a parameter. public interface Collection<E> extends Iterable<E> { int size(); boolean isEmpty(); boolean contains(Object element); boolean add(E element); //optional boolean remove(Object element); //optional Iterator<E> iterator(); Object[] toArray(); <T> T[] toArray(T[] a); …
The Collection Hierarchy (Partial illustration) Collection List Set Queue
The Collection Hierarchy (Partial illustration) Collection List Set Queue Vector
The Collection Hierarchy (Partial illustration) Collection List Set Queue Vector LinkedList PriorityQueue Stack
Case Study: Undoable Stack Various programs allow the user to undo his operations. The undo operations are performed in reverse order. In such a program, we need to add each operation with its parameters onto the stack.
Program Stack
Program Stack Resize 36
Program Stack Resize 36 Recolor 4 Resize 36
Program Stack Resize 24 Recolor 4 Resize 36 Undo: Resize(36)
Program Stack Resize 24 Recolor 4 Resize 36 Undo: Resize(36) Recolor 4 Resize 36
Undoable Stack Hierarchy TextArea -text: String -size: int -color: int + getters… + setters…
Undoable Stack Hierarchy TextArea -text: String -size: int -color: int + getters… + setters… Operation + perform(arg: int) + getArg() : int
Undoable Stack Hierarchy TextArea -text: String -size: int -color: int + getters… + setters… Operation + perform(arg: int) + getArg() : int Recolor - color: int + perform(arg: int) + getArg() : int Resize - size: int + perform(arg: int) + getArg() : int
Undoable Stack Hierarchy TextArea -text: String -size: int -color: int + getters… + setters… Operation + perform(arg: int) + getArg() : int 0..n Recolor - color: int + perform(arg: int) + getArg() : int Resize - size: int + perform(arg: int) + getArg() : int UndoStack + add (op :Operation) + undo()
The Collections class • The Collections class contains static methodsthat operate on collections: • min • max • reverse • sort • … Example: import java.util.Collections; import java.util.Vector; … Vector <Car> carsVec = new Vector <Car>(); … Collections.reverse(carsVec);
Wrapper Classes What happens if we want to create a collection of a primitive type? Collections can be made only of objects. Primitive types are not objects. We use wrapper classes instead. A wrapper class is an object representing a primitive type.
Wrapper Classes Integer Float Double Character Boolean int float double char boolean Example: Integer intObj = new Integer(10); int number = intObj.intValue();
A collection of wrapper objects Import java.util.Vector; … Vector <Integer> numVec = new Vector <Integer>(); int size = 10; for (int i = size; i >0; i--) numVec.add(new Integer( i )); Collections.sort(numVec); for (Integer i: numVec) System.out.println( i);