collections f the limitations of arrays f java collection framework hierarchy use the iterator...

42
Collections The limitations of arrays Java Collection Framework hierarchy Use the Iterator interface to traverse a collection Set interface, HashSet, and TreeSet List interface, ArrayList, and LinkedList Vector and Stack Map, HashMap, and TreeMap Collection and Array classes

Upload: hugo-copeland

Post on 28-Dec-2015

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Collections The limitations of arrays Java Collection Framework hierarchy Use the Iterator interface to traverse a collection Set interface, HashSet, and TreeSet List interface, ArrayList, and LinkedList Vector and Stack Map, HashMap, and TreeMap Collection and Array classes

Page 2: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Limitations of arrays

Once an array is created, its size cannot be altered. Array provides inadequate support for inserting, deleting, sorting, and searching operations.

Page 3: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Java Collection FrameworkThe java.util package contains some of the most exciting enhancements added by Java2 collections. Collections are a state-of-the-art technology that merits close attention by all Java programmers. Algorithms is another important part of the collection mechanism. Algorithms operate on collections and are defined as static methods within the Collections class. Another item created by the collections framework is the Iterator interface. An iterator gives you a general-purpose, standardized way of accessing the elements within a collection, one at a time.

Page 4: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Java Collection Framework

A collection is an object that represents a group of objects, often referred to as elements. The Java Collections Framework supports two types of collections, named collections and maps.

Page 5: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Java Collection Framework hierarchy, cont.

Set SortedSet

AbstractSet

Collection

TreeSet

HashSet

List

AbstractList

AbstractSequentialList

ArrayList LinkedList

AbstractCollection

Vector Stack

Page 6: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Java Collection Framework hierarchy, cont.

A collection can be a Set or a List, defined in the interfaces Set and

List, which are subinterfaces of Collection interface.

Page 7: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Java Collection Framework hierarchy, cont.

An instance of Map represents a group of objects, each of which is associated with a key. You can get the object from a map using a key, and you have to use a key to put the object into the map.

SortedMap

AbstractMap

Map

TreeMap

HashMap

Page 8: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

The Collection Interface

The Collection interface is the root interface for storing and processing a collection of objects.

Collection

+add(element: Object): boolean +addAll(collection: Collection): boolean +clear(): void +contains(elment: Object): boolean +containsAll(collection: Collection):boolean +equals(object: Object): boolean +hashcode(): int +iterator(): Iterator +remove(element: Object): boolean +removeAll(collection: Collection): boolean +retainAll(collection: Collection): boolean +size(): int +toArray(): Object[] +toArray(array: Object[]): Object[]

Page 9: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

The Set InterfaceThe Set interface extends the Collection interface. It does not introduce new methods or constants, but it stipulates that an instance of Set contains no duplicate elements. The concrete classes that implement Set must ensure that no duplicate elements can be added to the set. That is no two elements e1 and e2 can be in the set such that e1.equals(e2) is true.

Page 10: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

The HashSet Class

The HashSet class is a concrete class that

implements interface Set.

It can be used to store duplicate-free

elements.

Page 11: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

The Iterator

Iterator

+next() : Object+hasNext(): boolean+remove(): void

Iterator is a special object to provide a way to access the elements of a collection sequentially. Iterator implements one of two interfaces: Iterator or ListIterator

Page 12: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Example: HashSet and Iterator

This example creates a hash set filled with strings, and uses an iterator to traverse the elements in the list.

Page 13: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Example 19.1 Using HashSet and Iterator

import java.util.*;

public class TestHashSet {

public static void main(String[] args) {

Set mySet = new HashSet();

mySet.add(“Red”);

mySet.add(“Green”);

mySet.add(“White”);

mySet.add(“Red”);

Iterator iterator = mySet.iterator();

while(iterator.hasNext()) {

System.out.println(iterator.next() + “ ”);

}

}

}

Page 14: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Example 19.1 Using HashSet and Iterator, cont.

Iterator iterator = mySet.iterator();

while(iterator.hasNext()) {

System.out.println(iterator.next() + “ ”);

}

...

Output: Green Red White Only one “Red” string is in the set; The strings are not stored in the order in which they are added. There is no particular order in a hash set.

Page 15: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

The SortedSet Interface and the TreeSet Class

SortedSet is a subinterface of Set, which guarantees that the elements in the set are sorted. TreeSet is a concrete class that implements the SortedSet interface. You can use an iterator to traverse the elements in the sorted order.

Page 16: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

The SortedSet Interface and the TreeSet Class, cont.

The elements can be sorted in two ways.

One way is to use the Comparable interface. Objects can be

compared using by the compareTo() method. This approach

is referred to as a natural order. The other way is to specify a comparator for the elements in the set if the class for the elements does not implement the Comparable interface, or you don’t want to use the compareTo() method in the class that implements the Comparable interface. This approach is referred to as order by comparator.

Page 17: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Example 19.2a Using TreeSet to Sort Elements in a Set

This example creates a hash set filled with strings, and then creates a tree set for the same strings. The strings are sorted in the tree set using the compareTo() method in the Comparable interface.

Page 18: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Example 19.2a Using TreeSet to Sort Elements in a Set

Set hashSet = new HashSet();

hashSet.add(“Yellow”);

hashSet.add(“White ”);

hashSet.add(“Green”);

hashSet.add(“Orange”);

System.out.println(“An unsorted set of strings”);

System.out.println(hashSet + “\n”);

...

Output: An unsorted set of strings [Orange, Green, White, Yellow]

Page 19: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Example 19.2a Using TreeSet to Sort Elements in a Set, cont.

Set treeSet = new TreeSet(hashSet);

System.out.println(“Sorted set of strings”);

System.out.println(treeSet + “\n”);

Output: A sorted set of strings

[Green, Orange, White, Yellow]

Page 20: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Example 19.2b Using TreeSet to Sort Elements in a Set

The example also creates a tree set of geometric

objects. The geometric objects are sorted using the

compare method in the Comparator interface.

Comparator interface has two methods:

public int compare(Object o1, Object o2)

public boolean equals(Object o1)

Page 21: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Example:TreeSet to Sort Elements in a Set

import java.util.Comparator;

public class ShapeComparator implements Comparator {

public int compare(Object o1, Object o2) {

double area1 = ((Shape)o1).findArea();

double area2 = ((Shape)o2).findArea();

if (area1 < area2) return -1;

else if (area1 == area2) return 0;

else return 1;

}

}

Page 22: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

TreeSet to Sort Elements in a Set

Set shapeSet = new TreeSet(new ShapeComparator());

shapeSet.add(new Rectangle(4,5));

shapeSet.add(new Circle(40));

shapeSet.add(new Circle(40)); // one more

shapeSet.add(new Cylinder(4,1));

Iterator iterator = shapeSet.iterator();

System.out.println(“A sorted set of shapes”);

while(iterator.hasNext()) {

Shape object = (Shape)iterator.next());

System.out.println(object + ”, area = “ +

object.findAresa());

}

Page 23: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

TreeSet to Sort Elements in a Set, cont.

Output: A sorted set of strings

[Rectangle] width = 4.0, height = 5,0, area = 20.0

[Cylinder] radius = 4.0, length = 1, area = 125.66

[Circle] radius = 40.0, area = 5026.55

Page 24: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

The List InterfaceA set stores non-duplicate elements. To allow duplicate elements to be stored in a collection, you need to use a list. A list can not only store duplicate elements, but can also allow the user to specify where the element is stored. The user can access the element by index.

Page 25: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

The List Interface, cont.

List

+add(index: int, element: Object) : boolean+addAll(index: int, collection: Collection) : boolean+get(index: int) : Object+indexOf(element: Object) : int+lastIndexOf(element: Object) : int+listIterator() : ListIterator+listIterator(startIndex: int) : ListIterator+remove(index: int) : int+set(index: int, element: Object) : Object+subList(fromIndex: int, toIndex: int) : List

Collection

Page 26: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

The List Iterator

ListIterator

+add(element: Object) : void+hasPrevious() : boolean+nextIndex() : int+previousIndex() : int+previous() : Object+previousIndex() : int+set(element: Object) : void

Iterator

Extends Iterator,

providing two-way

sequential access and

elements’ modification.

Page 27: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Example 19.3 Using ArrayList and LinkedList

This example creates an array list filled with numbers, and inserts new elements into the specified location in the list. The example also creates a linked list from the array list, inserts and removes the elements from the list. Finally, the example traverses the list forward and backward.

Page 28: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Example 19.3 Using ArrayList and LinkedList

ArrayList arrayList = new ArrayList(); // []arrayList.add(new Integer(1)); //[1]arrayList.add(new Integer(2)); //[1,2]arrayList.add(new Integer(3)); //[1,2,3]arrayList.add(0, new Integer(10)); //[10,1,2,3]arrayList.add(3, new Integer(20)); //[10,1,2,20,3]System.out.println(arrayList);

Output:

[10,1,2,20,3]

Page 29: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Example 19.3 Using ArrayList and LinkedList

LinkedList linkedList = new LinkedList(arrayList);linkedList.add(1, “A”); //[10,“A”, 1, 2, 20]linkedList.removeLast(); //[10,“A”, 1, 2]linkedList.addFirst(“B”); //[“B”, 10,“A”, 1, 2]System.out.println(linkedList);

Output:

[“B”, 10, “A”, 1, 2, 20]

Page 30: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

ArrayList vs. LinkedList ArrayList provides support random access through an

index without inserting or removing elements from any place

other than an end.

LinkedList provides support for random access through

an index with inserting and deletion elements from any place .

If your application does not require insertion or deletion of

elements, the Array is the most efficient data structure.

Page 31: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

The Vector and Stack Classes

The Java Collections Framework was introduced

with Java 2. Several data structures were supported

prior to Java 2. Among them are the Vector class

and the Stack class.

These classes were redesigned to fit into the Java

Collections Framework, but their old-style methods

are retained for compatibility.

Page 32: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

The Vector ClassIn Java 2, Vector is the same as ArrayList, except that Vector contains the synchronized methods for accessing and modifying the vector. None of the new collection data structures introduced so far are synchronized. If synchronization is required, you can use the synchronized versions of the collection classes. These classes are introduced later in the section, “The Collections Class.”

Page 33: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

The Vector Class, cont.

Vector

+addElement(element: Object) : void +capacity() : void +copyInto(anArray: Object[]) : void +elementAt(index: int) : Object +elements() : Enumeration +ensureCapacity() : void +firstElement() : int +insertElementAt(index: int) : void +lastElement() : Object +removeAllElements() : void +removeElement(element: Object) : void +removeElementAt(index: int) : void +setElementAt(element: Object, index: int) : void +setSize(newSize: int) : void +trimToSize() : void

List

Page 34: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

The Stack ClassThe Stack class represents a

last-in-first-out (LIFO) stack

of objects. The elements are

accessed only from the top of

the stack. You can retrieve,

insert, or remove an element

from the top of the stack.

Stack

+empty() : boolean +peek() : Object +pop() : Object +push(element: Object) : void +search(element: Object) : int

Vector

Page 35: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Example 19. 4 Using Vector and Stack

This example presents two programs to rewrite Example 5.2,

using a vector and a stack instead of an array, respectively. The

program reads student scores from the keyboard, stores the

scores in the vector, finds the best scores, and then assigns

grades for all the students. A negative score signals the end of

the input. (See the Companion site)

AssignGradeUsingVectorAssignGradeUsingVector

Page 36: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

The Map InterfaceThe Map interface maps keys to the elements. The keys are like indexes. In List, the indexes are integer. In Map, the keys can be any objects.

Map

+clear() : void +containsKey(key: Object) : boolean +containsValue(value: Object) : boolean +entrySet() : Set +get(key: Object) : Object +isEmpty() : boolean +keySet() : Set +put(key: Object, value: Object) : Object +putAll(m: Map) : void +remove(key: Object) : Object +size() : int +values() : Collection

Page 37: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

HashMap and TreeMapThe HashMap and TreeMap classes are two

concrete implementations of the Map interface.

The HashMap class is efficient for locating a

value, inserting a mapping, and deleting a mapping.

The TreeMap class, implementing SortedMap,

is efficient for traversing the keys in a sorted order.

Page 38: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Example 19.5 Using HashMap and TreeMap

This example creates a hash map that maps borrowers to mortgages. The program first creates a hash map with the borrower’s name as its key and mortgage as its value. The program then creates a tree map from the hash map, and displays the mappings in ascending order of the keys.

Page 39: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

The Collections

Class

Collections

+binarySearch(list: List, key: Object) : int +binarySearch(list: List, key: Object, c: Comparator) : int +copy(src: List, des: List) : void +enumeration(c: final Collection) : Enumeration +fill(list: List, o: Object) : void +max(c: Collection) : Object +max(c: Collection, c: Comparator) : Object +min(c: Collection) : Object +min(c: Collection, c: Comparator) : Object +nCopies(n: int, o: Object) : List +reverse(list: List) : void +reverseOrder() : Comparator +shuffle(list: List) : void +shuffle(list: List, rnd: Random) : void +singleton(o: Object) : Set +singletonList(o: Object) : List +singletonMap(key: Object, value: Object) : Map +sort(list: List) : void +sort(list: List, c: Comparator) : void +synchronizedCollection(c: Collection) : Collection +synchronizedList(list: List) : List +synchronizedMap(m: Map) : Map +synchronizedSet(s: Set) : Set +synchronizedSortedMap(s: SortedMap) : SortedMap +synchronizedSortedSet(s: SortedSet) : SortedSet +unmodifiedCollection(c: Collection) : Collection +unmodifiedList(list: List) : List +unmodifiedMap(m: Map) : Map +unmodifiedSet(s: Set) : Set +unmodifiedSortedMap(s: SortedMap) : SortedMap +unmodifiedSortedSet(s: SortedSet) : SortedSet

The Collections class contains various static methods for operating on collections and maps, for creating synchronized collection classes, and for creating read-only collection classes.

Page 40: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Example 19. 6 Using the Collections Class

This example demonstrates using the methods in the

Collections class. The example creates a list, sorts it,

and searches for an element. The example wraps the

list into a synchronized and read-only list.

(See the Companion site)

TestCollectionsTestCollections

Page 41: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

The Arrays Class

Arrays

+asList(a: Object[]) : List +binarySearch(a: byte[],key: byte) : int +binarySearch(a: char[], key: char) : int +binarySearch(a: double[], key: double) : int +binarySearch(a,: float[] key: float) : int +binarySearch(a: int[], key: int) : int +binarySearch(a: long[], key: long) : int +binarySearch(a: Object[], key: Object) : int +binarySearch(a: Object[], key: Object, c: Comparator) : int +binarySearch(a: short[], key: short) : int +equals(a: boolean[], a2: boolean[]) : boolean +equals(a: byte[], a2: byte[]) : boolean +equals(a: char[], a2: char[]) : boolean +equals(a: double[], a2: double[]) : boolean +equals(a: float[], a2: float[]) : boolean +equals(a: int[], a2: int[]) : boolean +equals(a: long[], a2: long[]) : boolean +equals(a: Object[], a2: Object[]) : boolean +equals(a: short[], a2: short[]) : boolean +fill(a: boolean[], val: boolean) : void +fill(a: boolean[], fromIndex: int, toIndex: int, val: boolean) : void Overloaded fill method for char, byte, short, int, long, float, double, and Object. +sort(a: byte[]) : void +sort(a: byte[], fromIndex: int, toIndex: int) : void Overloaded sort method for char, short, int, long, float, double, and Object.

•The Arrays class contains various static methods for sorting and searching arrays, for comparing arrays, and for filling array elements.

•It also contains a method for converting an array to a list.

Page 42: Collections F The limitations of arrays F Java Collection Framework hierarchy  Use the Iterator interface to traverse a collection  Set interface, HashSet,

Example 19. 7 Using the Arrays Class

This example demonstrates using the methods in the

Arrays class. The example creates an array of int values,

fills part of the array with 50, sorts it, searches for an

element, and compares the array with another array. (See the Companion site)

TestArraysTestArrays