Download presentation
Presentation is loading. Please wait.
Published byAlberta Green Modified over 9 years ago
1
1 Interfaces in Java’s Collection Framework Rick Mercer
2
2 Java's Collection Framework Java's Collection Framework — Unified architecture for representing and manipulating collections Collection framework contains — Interfaces (ADTs): specification not implementation — Concrete implementations as classes — Polymorphic Algorithms to search, sort, find, shuffle,... Algorithms are polymorphic: — the same method can be used on many different implementations of the appropriate collection interface. In essence, algorithms are reusable functionality.
3
3 Core Collection interfaces in java.util Image from the Java Tutorial Set, List, and Queue extend the Collection interface — If you implement Set, in addition to all of Set’s methods, all Collection methods must also be implemented BTW: Collection extends Iterable
4
4 interface Collection Bags (multi-sets) should implement Collection directly booleanadd(E e) booleanaddAll(Collection c) voidclear() booleancontains(Object o) booleancontainsAll(Collection c) booleanequals(Object o) inthashCode() booleanisEmpty() Iterator iterator() booleanremove(Object o) booleanremoveAll(Collection c) booleanretainAll(Collection c) intsize() Object[]toArray() T[]toArray(T[] a)
5
5 List an ADT written as a Java interface List : a collection with a first element, a last element, distinct predecessors and successors List — The user of this interface has precise control over where in the list each element is inserted — duplicates that " equals " each other are allowed The List interface is implemented by these three collection classes — ArrayList ArrayList — LinkedList LinkedList — Vector Vector
6
6 // Interface name: List // Three classes that implement the List interface: List bigList = new ArrayList (); List littleList = new LinkedList (); List sharedList = new Vector (); // All three have an add method bigList.add("in array list"); littleList.add("in linked list"); sharedList.add("in vector"); // All three have a get method assertEquals("in array list", bigList.get(0)); assertEquals("in linked list", littleList.get(0)); assertEquals("in vector", sharedList.get(0)); Can treat all three (and more) as a List
7
7 interface Iterator Iterators provide a general way to traverse all elements in a collection ArrayList list = new ArrayList (); list.add("1-FiRsT"); list.add("2-SeCoND"); list.add("3-ThIrD"); Iterator itr = list.iterator(); while (itr.hasNext()) { System.out.println(itr.next().toLowerCase()); } Output 1-first 2-second 3-third
8
8 The actual interface public interface Iterator { // Returns true if the iteration has more elements. boolean hasNext(); //Returns the next element in the iteration. E next(); // Removes from the underlying collection the last element // returned by the iterator (optional operation). void remove(); }
9
9 Algorithms Java has polymorphic algorithms to provide functionality for different types of collections Methods use interfaces to Sort any List — Sorting (e.g. sort) Sorting — Shuffling (e.g. shuffle) Shuffling — Routine Data Manipulation (e.g. reverse, addAll) Routine Data Manipulation — Searching (e.g. binarySearch) Searching — Composition (e.g. frequency) Composition — Finding Extreme Values (e.g. max) Finding Extreme Values
10
10 Before looking at Collections.java. some Additional Generics To specify additional interfaces that must be implemented, use the & character, as in: In generics, an unknown type is represented by the wildcard character “?” containsAll(Collection c) The receiver must be a superclass (or the same type) of the type of elements being added http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html
11
11 Can add to or to final class String extends Object List a = new ArrayList (); a.add("Z"); a.add("A"); List b = new ArrayList (); b.add("Y"); b.add("B"); b.addAll(a); System.out.println(a); System.out.println(b); // a.addAll(a) is okay, // but this is an error: a.addAll(b);
12
12 class Collections has many static methods List a = new ArrayList (); a.add("Z"); a.add("A"); a.add("M"); a.add("T"); a.add("G"); System.out.println(a); System.out.println(Collections.min(a)); System.out.println(Collections.max(a)); Collections.sort(a); System.out.println(a); Collections.shuffle(a); System.out.println(a); [Z, A, M, T, G] A Z [A, G, M, T, Z] [G, M, T, Z, A] public static > T min(Collection coll) // Ugly …
13
13 TreeSet implements Set Set collections with no duplicates Set — More formally, sets contain no pair of elements e1 and e2 such that e1.equals(e2) — Has the same methods as Collection, but intended to have different meanings public interface Set extends Collection { boolean add(E o); // Do not allow duplicates
14
14 Set and SortedSet The Set interface extends Collection Two classes that implement Set — TreeSet: values stored in order, O(log n) — HashSet: values in a hash table, no order, O(1) SortedSet extends Set by adding methods E first(), SortedSet tailSet(E fromElement), SortedSetE SortedSet headSet(E fromElement), E last(), SortedSet subSet(E fromElement, E toElement)SortedSetE SortedSetE
15
15 Set or SortedSet? Set names = new TreeSet (); names.add("Sandeep"); names.add("Chris"); names.add("Kim"); names.add("Chris"); // not added names.add("Devon"); for (String name : names) System.out.println(name); Change to HashSet
16
16 The Map Interface (ADT) Map describes a type that stores a collection of elements that consists of a key and a value A Map associates (maps) a key the it's value The keys must be unique — the values need not be unique — put destroys one with same key
17
17 Map Operations Java's HashMap HashMap — public V put(K key, V value) associates key to value and stores mapping — public V get(Object key) associates the value to which key is mapped or null — public boolean containsKey(Object key) returns true if the Map already uses the key — public V remove(Object key) Returns previous value associated with specified key, or null if there was no mapping for key. — Collection values() get a collection you can iterate over
18
18 Sample Code Map map = new HashMap (); map.put(2, "Ali"); map.put(1, "Jaime"); map.put(3, "Alex"); map.put(1, "Dylan"); // Wipes out old System.out.println(map); System.out.println(map.keySet()); System.out.println(map.values());
19
19 Queue boolean add(E e) Inserts e into this queue E element() Retrieves, but does not remove, the head of this queue boolean offer(E e) Inserts e into this queue E peek() Retrieves, but does not remove, the head of this queue, or returns null if this queue is empty E poll() Retrieves and removes the head of this queue, or returns null if this queue is empty E remove() Retrieves and removes the head of this queue
20
20 ArrayBlockingQueue a FIFO queue ArrayBlockingQueue numberQ = new ArrayBlockingQueue (40); numberQ.add(3.3); numberQ.add(2.2); numberQ.add(5.5); numberQ.add(4.4); numberQ.add(7.7); assertEquals(3.3, numberQ.peek(), 0.1); assertEquals(3.3, numberQ.remove(), 0.1); assertEquals(2.2, numberQ.remove(), 0.1); assertEquals(5.5, numberQ.peek(), 0.1); assertEquals(3, numberQ.size());
21
21 Another use of interfaces There are a number of situations in software engineering when it is important for disparate groups of programmers to agree to a "contract" that spells out how their software interacts. Each group should be able to write their code without any knowledge of how the other group's code is written. Generally speaking, interfaces are such contracts. http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.