31
Java Collections Framework Version 3.3.1 - April 2018 © Maurizio Morisio, Marco Torchiano, 2018 Object Oriented Programming http://softeng.polito.it/courses/09CBI Licensing Note 2 This work is licensed under the Creative Commons Attribution- NonCommercial-NoDerivatives 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ . You are free: to copy, distribute, display, and perform the work Under the following conditions: § Attribution. You must attribute the work in the manner specified by the author or licensor. § Non-commercial. You may not use this work for commercial purposes. § No Derivative Works. You may not alter, transform, or build upon this work. § For any reuse or distribution, you must make clear to others the license terms of this work. § Any of these conditions can be waived if you get permission from the copyright holder. Your fair use and other rights are in no way affected by the above.

Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

  • Upload
    others

  • View
    13

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

Java Collections Framework

Version 3.3.1 - April 2018 © Maurizio Morisio, Marco Torchiano, 2018

Object Oriented Programming

http://softeng.polito.it/courses/09CBI

Licensing Note

2

This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/. You are free: to copy, distribute, display, and perform the work

Under the following conditions: §  Attribution. You must attribute the work in the manner specified by

the author or licensor.

§  Non-commercial. You may not use this work for commercial purposes.

§  No Derivative Works. You may not alter, transform, or build upon this work.

§  For any reuse or distribution, you must make clear to others the license terms of this work.

§  Any of these conditions can be waived if you get permission from the copyright holder.

Your fair use and other rights are in no way affected by the above.

Page 2: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

3

Framework §  Interfaces (ADT, Abstract Data Types) §  Implementations (of ADT) §  Algorithms (sort) §  Contained in the package java.util § Originally using Object, since Java 5

redefined as generic

4

Interfaces

Collection<E>

Set<E> List<E>

Map<K,V>

SortedSet<E> SortedMap<K,V>

Group containers Associative containers

Queue<E>

Iterable<E>

Page 3: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

5

Implementations

TreeSet

TreeMap Array List

Linked List

HashMap

Linked HashMap

Linked HashSet

HashSet

Map<K,V>

Sorted Map<K,V>

Collection<E>

Set<E> List<E>

Sorted Set<E>

Queue<E>

Priority Queue

Interfaces

Classes

6

Internals

interface

data structure

classes

Hash table

Balanced tree

Resizable array

Linked list HT + LL

Set HashSet TreeSet Linked HashSet

List ArrayList LinkedList

Map HashMap TreeMap Linked HashMap

Page 4: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

GROUP CONTAINERS (COLLECTIONS)

Collection<E>

Set<E> List<E>

SortedSet<E>

Queue<E>

Collection

§  Group of elements (references to objects) §  It is not specified whether they are

w Ordered / not ordered w Duplicated / not duplicated

§  Implements Iterable §  Two constructors common to all classes

implementing Collection w  C() w  C(Collection c)

8

Page 5: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

Collection interface int size() boolean isEmpty() boolean contains(E element) boolean containsAll(Collection<?> c) boolean add(E element) boolean addAll(Collection<? extends E> c) boolean remove(E element) boolean removeAll(Collection<?> c) void clear() Object[] toArray() Iterator<E> iterator()

9

Collection example Collection<Person> persons = new LinkedList<Person>(); persons.add( new Person(�Alice�) ); System.out.println( persons.size() );

Collection<Person> copy = new TreeSet<Person>(); copy.addAll(persons);//new TreeSet(persons)

Person[] array = copy.toArray(); System.out.println( array[0] );

10

Page 6: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

List

§  Can contain duplicate elements §  Insertion order is preserved §  User can define insertion point §  Elements can be accessed by position §  Augments Collection interface

11

List interface E get(int index) E set(int index, E element) void add(int index, E element) E remove(int index) boolean addAll(int index,Collection<E> c) int indexOf(E o) int lastIndexOf(E o) List<E> subList(int from, int to)

12

Page 7: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

List implementations ArrayList

§  get(n) w Constant

§  add(0,…) w  Linear

§  add() w Constant

13

LinkedList

§  get(n) w  Linear

§  add(0, … ) w Constant

§  add() w Constant

List implementations - Get

0

1000

2000

3000

4000

5000

6000

7000

8000

9000

0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000

Tim

e [n

s]

Size [# items]

LinkedList

ArrayList

Page 8: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

List Implementations - Add

0

5

10

15

20

25

30

35

0 20 40 60 80 100 120 140 160

ns

Size

add in first position in a list of given size

LinkedList

ArrayList

List Implementations - Add

0

1000

2000

3000

4000

5000

6000

7000

8000

9000

0 50 100 150 200 250 300

add given # of elements in first position

LinkedList

ArrayList

Page 9: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

List implementation - Models

t(n) = CLAdd in first pos. in list of size n

LinkedList ArrayList

t(n) = n · CA

t(n) = n · CLAdd n elements t(n) =nX

i=1

CA · i

=CA

2n · (n� 1)

CL = 16.0 ns CA = 0.2 ns

List implementations §  ArrayList<E>

w  ArrayList() w  ArrayList(int initialCapacity) w  ArrayList(Collection<E> c) w  void ensureCapacity(int minCapacity)

§  LinkedList<E> w  void addFirst(E o) w  void addLast(E o) w  E getFirst() w  E getLast() w  E removeFirst() w  E removeLast()

18

Page 10: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

Example I LinkedList<Integer> ll = new LinkedList<Integer>();

ll.add(new Integer(10)); ll.add(new Integer(11)); ll.addLast(new Integer(13)); ll.addFirst(new Integer(20)); //20, 10, 11, 13

19

Example II

20

Car[] garage = new Car[20]; garage[0] = new Car(); garage[1] = new ElectricCar(); garage[2] = new ElectricCar(); garage[3] = new Car(); for(int i=0; i<garage.length; i++){ garage[i].turnOn(); }

Null pointer error

List<Car> garage = new ArrayList<Car>(20); garage.set( 0, new Car() ); garage.set( 1, new ElectricCar() ); garage.set( 2, new ElectricCar() ); garage.set( 3, new Car()); for(int i; i<garage.size(); i++){ Car c = garage.get(i); c.turnOn(); }

Page 11: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

21

Example III

List l = new ArrayList(2); // 2 refs to null

l.add(new Integer(11)); // 11 in position 0 l.add(0, new Integer(13)); // 11 in position 1

l.set(0, new Integer(20)); // 13 replaced by 20

l.add(9, new Integer(30)); // NO: out of bounds

l.add(new Integer(30)); // OK, size extended

Queue interface §  Collection whose elements have an

order w not and ordered collection though

§  Defines a head position where is the first element that can be accessed w peek() w poll()

22

Page 12: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

Queue implementations §  LinkedList

w head is the first element of the list w FIFO: Fist-In-First-Out

§  PriorityQueue w head is the smallest element

23

Queue example Queue<Integer> fifo = new LinkedList<Integer>(); Queue<Integer> pq = new PriorityQueue<Integer>(); fifo.add(3); pq.add(3); fifo.add(1); pq.add(1); fifo.add(2); pq.add(2); System.out.println(fifo.peek()); // 3

System.out.println(pq.peek()); // 1

24

Page 13: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

Set interface §  Contains no methods

w Only those inherited from Collection §  add()has the restriction that no

duplicate elements are allowed w e1.equals(e2) == false ∀ e1,e2 ∈ Σ

§  Iterator

w The elements are traversed in no particular order

25

SortedSet interface §  No duplicate elements §  Iterator

w  The elements are traversed according to the natural ordering (ascending)

§  Augments Set interface w  Object first() w  Object last() w  SortedSet headSet(Object toElement) w  SortedSet tailSet(Object fromElement) w  SortedSet subSet(Object from, Object to)

26

Page 14: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

Set implementations §  HashSet implements Set

w Hash tables as internal data structure (faster)

§  LinkedHashSet extends HashSet w Elements are traversed by iterator

according to the insertion order

§  TreeSet implements SortedSet w R-B trees as internal data structure

(computationally expensive)

27

Note on sorted collections §  Depending on the constructor used

they require different implementation of the custom ordering

§  TreeSet() w Natural ordering (elements must be

implementations of Comparable) §  TreeSet(Comparator c)

w Ordering is according to the comparator rules, instead of natural ordering

28

Page 15: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

Generic collections §  Since Java 5, all collection interfaces

and classes have been redefined as Generics

§  Use of generics leads to code that is w safer w more compact w easier to understand w equally performing

29

Object list - excerpt public interface List{ void add(Object x); Object get(int i); Iterator<E> iterator(); } public interface Iterator{ Object next(); boolean hasNext(); }

30

Page 16: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

31

Example § Using a list of Integers

w Without generics ( ArrayList list ) list.add(0, new Integer(42)); int n= ((Integer)(list.get(0))).intValue();

w With generics ( ArrayList<Integer> list ) list.add(0, new Integer(42)); int n= ((Integer)(list.get(0))).intValue();

w + autoboxing ( ArrayList<Integer> list ) list.add(0,new Integer(42)); int n = ((Integer)(list.get(0))).intValue();

ITERATORS

Page 17: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

Iterable interface §  Container of elements that can be

iterated upon §  Provides a single method: Iterator<E> iterator()

w It returns the iterator on the elements of the collection

§  Collection extends Iterable

Iterators and iteration §  A common operation with collections

is to iterate over their elements §  Interface Iterator provides a

transparent means to cycle through all elements of a Collection

§  Keeps track of last visited element of the related collection

§  Each time the current element is queried, it moves on automatically

34

Page 18: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

Iterator

§  Allows the iteration on the elements of a collection

§  Two main methods: w boolean hasNext()

– Checks if there is a next element to iterate on w E next()

– Returns the next element and advances by one position

w void remove() – Optional method, removes the current element

Iterator examples

36

Iterable<Person> persons = new LinkedList<Person>();

… for(Iterator<Person> i = persons.iterator(); i.hasNext(); ) {

Person p = i.next(); … System.out.println(p);

}

Print all objects in a list

Page 19: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

37

Iterator examples

Iterable<Person> persons = new LinkedList<Person>();

… for(Person p: persons) { … System.out.println(p);

}

The for-each syntax avoids using iterator directly

38

Iterator examples (until Java 1.4)

Collection persons = new LinkedList(); … for(Iterator i= persons.iterator(); i.hasNext(); ) { Person p = (Person)i.next(); … }

Print all objects in a list

Page 20: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

Iterable forEach §  Iterable defines the default method

forEach(Consumer<? super T> action)

§  Can be used to perform operations of elements with a functional interface

Iterable<Person> persons = new LinkedList<Person>();

… persons.forEach( p -> { System.out.println(p);

}

40

Note well §  It is unsafe to iterate over a collection

you are modifying (add/remove) at the same time

§  Unless you are using the iterator’s own methods w Iterator.remove() w ListIterator.add()

Page 21: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

41

Delete List<Integer> lst=new LinkedList<Integer>(); lst.add(new Integer(10)); lst.add(new Integer(11)); lst.add(new Integer(13)); lst.add(new Integer(20)); int count = 0; for (Iterator<?> itr = lst.iterator(); itr.hasNext(); ) {

itr.next(); if (count==1) lst.remove(count); // wrong count++; }

ConcurrentModificationException

42

Delete (cont�d) List<Integer> lst=new LinkedList<Integer>(); lst.add(new Integer(10)); lst.add(new Integer(11)); lst.add(new Integer(13)); lst.add(new Integer(20)); int count = 0; for (Iterator<?> itr = lst.iterator(); itr.hasNext(); ) {

itr.next(); if (count==1) itr.remove(); // ok count++; } Correct

Page 22: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

43

Add List lst = new LinkedList(); lst.add(new Integer(10)); lst.add(new Integer(11)); lst.add(new Integer(13)); lst.add(new Integer(20)); int count = 0; for (Iterator itr = lst.iterator(); itr.hasNext(); ) {

itr.next(); if (count==2) lst.add(count, new Integer(22));//wrong count++; }

ConcurrentModificationException

44

Add (cont�d) List<Integer> lst=new LinkedList<Integer>(); lst.add(new Integer(10)); lst.add(new Integer(11)); lst.add(new Integer(13)); lst.add(new Integer(20)); int count = 0; for (ListIterator<Integer> itr = lst.listIterator(); itr.hasNext();){

itr.next(); if (count==2) itr.add(new Integer(22)); // ok count++; }

Correct

Page 23: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

ASSOCIATIVE CONTAINERS (MAPS)

Map<K,V>

SortedMap<K,V>

Map §  A container that associates keys to values

(e.g., SSN ⇒ Person) §  Keys and values must be objects §  Keys must be unique

w Only one value per key §  Following constructors are common to all

collection implementers w  M() w  M(Map m)

46

Page 24: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

Map interface §  V put(K key, V value) §  V get(K key) §  Object remove(K key) §  boolean containsKey(K key) §  boolean containsValue(V value) §  public Set<K> keySet() §  public Collection<V> values() §  int size() §  boolean isEmpty() §  void clear()

47

Map example Map<String,Person> people =new HashMap<>(); people.put( �ALCSMT�, //ssn new Person(�Alice�, �Smith�) );

people.put( �RBTGRN�, //ssn new Person(�Robert�, �Green�) );

Person bob = people.get(�RBTGRN�); if( bob == null ) System.out.println( �Not found� ); int populationSize = people.size();

48

Page 25: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

49

SortedMap interface §  The elements are traversed according

to the keys��natural ordering (ascending)

§  Augments Map interface w  SortedMap subMap(K fromKey, K toKey) w  SortedMap headMap(K toKey) w  SortedMap tailMap(K fromKey) w  K firstKey() w  K lastKey()

50

Map implementations §  Analogous to Set §  HashMap implements Map

w No order §  LinkedHashMap extends HashMap

w Insertion order §  TreeMap implements SortedMap

w Ascending key order

Page 26: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

51

HashMap

§  Get/put takes constant time (in case of no collisions)

§  Automatic re-allocation when load factor reached

§  Constructor optional arguments w load factor (default = .75) w initial capacity (default = 16)

52

Using HashMap Map<String,Student> students = new HashMap<String,Student>();

students.put(�123�, new Student(�123�,�Joe Smith�));

Student s = students.get(�123�); for(Student si: students.values()){ }

Page 27: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

53

TreeMap

§  Get/put takes log time §  Based on a Red-Black tree §  Keys are maintained and will be

traversed in order §  Constructor optional arguments

w Comparator to replace the natural order of keys

ALGORITHMS

Page 28: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

Algorithms §  Static methods of java.util.Collections

w Work on List since it has the concept of position §  sort() - merge sort, n log(n) §  binarySearch() – requires ordered

sequence §  shuffle() – unsort §  reverse() - requires ordered sequence §  rotate() – of given a distance §  min(), max() – in a Collection

55

sort() method § Operates on List<T>

w Require access by index to perform sorting §  Two generic overloads:

w on Comparable objects: <T extends Comparable<? super T>> void sort(List<T> list)

w using a Comparator object: <T> void sort(List<T> list, Comparator<? super T> cmp)

56

Page 29: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

57

Sort generic

§ Why <? super T> instead of just <T> ? w Suppose you define

– MasterStudent extends Student { } w Intending to inherit the Student ordering

–  It does not implement Comparable<MasterStudent>

– But MasterStudent extends (indirectly) Comparable<Student>

T extends Comparable<? super T> Student MasterStudent MasterStudent

58

Custom ordering (alternative)

List students = new LinkedList(); students.add(new Student("Mary”,"Smith",34621)); students.add(new Student("Alice”,"Knight",13985)); students.add(new Student("Joe","Smith",95635)); Collections.sort(students); // sort by name Collections.sort(students, new StudentIDComparator()); // sort by ID

Page 30: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

59

Search §  <T> int binarySearch(List<? extends Comparable<? super T>> l, T key)

w Searches the specified object w List must be sorted into ascending order

according to natural ordering §  <T> int binarySearch(List<? extends T> l, T key, Comparator<? super T> c)

w Searches the specified object w List must be sorted into ascending order

according to the specified comparator

Algorithms - Arrays §  Static methods of java.util.Arrays

class w Work on object arrays

§  sort() §  binarySearch()

60

Page 31: Java Collections Framework - polito.it · Framework § Interfaces (ADT, Abstract Data Types) § Implementations (of ADT) § Algorithms (sort) § Contained in the package java.util

61

Search - Arrays §  int binarySearch(Object[] a, Object key)

w Searches the specified object w Array must be sorted into ascending

order according to natural ordering §  int binarySearch(Object[] a, Object key, Comparator c)

w Searches the specified object w Array must be sorted into ascending

order according to the specified comparator

Wrap-up §  The collections framework includes

interfaces and classes for containers §  There are two main families

w Group containers w Associative containers

§  All the components of the framework are defined as generic types