2. Agenda
Collection List/Set and Map
Iterator and Fail Fast
Why to use
o ArrayList vs LinkedList
o ArrayList vs Vector
o HashMap vs HashTable
o Iterator vs Enumeration
Synchronize Collection
Equals() and HashCode()
www.SunilOS.com 2
Generics
Wrapper Classes
Autoboxing/Unboxing
Concurrent collection
Stream API
4. www.SunilOS.com 4
Collections Framework
A collections framework is a unified architecture for
representing and manipulating collections.
It consists of
o Interfaces – Collection, Set, List, Queue
o Concrete Classes – ArrayList, Hashmap, HashSet, etc.
o Algorithm - searching and sorting
6. www.SunilOS.com 6
Collection Interfaces
Collection-A collection represents a group of objects known as its
elements.
Set - cannot contain duplicate elements.
List- ordered collection, can contain duplicate elements.
Queue - holds multiple elements prior to processing. a Queue
provides additional insertion, extraction, and inspection
operations.
Map - an object that maps keys to values. A Map cannot contain
duplicate keys.
SortedSet - a Set that maintains its elements in ascending order.
SortedMap - a Map that maintains its mappings in ascending key
order.
7. www.SunilOS.com 7
List by regular array
public static void main(String[] args) {
o String[] names = new String[5];
o for(int i=0;i<names.length; i++){
•names[i]= " No # " + i;
o }
o System.out.println("Names =" + names.length);
}
Disadvantages:
o All elements should be of same type, here it is String.
o Primitive data type arrays can be defined.
o Array size is Fixed. Defined at the time of creation.
8. www.SunilOS.com 8
List by Collection framework
public static void main(String[] args) {
o ArrayList names = new ArrayList();
o for(int i=0;i<10; i++){
• names.add(" No # " + i);
o }
o System.out.println("Names =" + names.size());
o Object o = names.get(0);
o String name = (String) o;
o //String name = (String) names.get(0);
o System.out.println(“ First Name is " + name);
}
Advantages:
o Unlimited size, no need to define array size at the time of creation.
o Add object of any class, in other words any object in Java.
o Add only objects but NOT primitive data types.
9. www.SunilOS.com 9
Interface Collection
add(o) Add a new element
addAll(c) Add a collection
clear() Remove all elements
contains(o) Membership checking
containsAll(c) Inclusion checking
isEmpty() Whether it is empty
iterator() Return an iterator
remove(o) Remove an element
removeAll(c) Remove a collection
retainAll(c) Keep the elements
size() The number of elements
10. www.SunilOS.com 10
Interface List
add(i,o) Inserts o at position i.
get(i) Returns the i-th element.
remove(i) Removes the i-th element.
set(i,o) Replaces the i-th element with o.
indexOf(o) Searches object from beginning.
lastIndexOf(o) Searches object from end.
sublist(start index, end index) Returns
sublist.
List allows multiple NULL values to be inserted.
12. www.SunilOS.com 12
Interface Queue
element(): Retrieves, but does not remove the head of this queue.
offer(E o): Inserts the specified element into this queue, if
possible. Returns true if inserted.
peek(): Retrieves, but does not remove the head of this queue,
returning null if this queue is empty.
poll(): Retrieves and removes the head of this queue, or null if this
queue is empty.
remove(): Retrieves and removes the head of this queue.
Throws exception Returns special value
Insert add(e) offer(e)
Remove remove() poll()
Examine element() peek()
13. www.SunilOS.com 13
Interface Map
clear() Removes all mappings.
containsKey(k) Checks membership of Key.
containsValue(v) Checks membership of Value.
entrySet() Set of key-value pairs.
get(k) Returns the value associated with Key.
isEmpty() Whether it is empty.
keySet() Returns Set of keys.
put(k,v) Inserts Key and Value pair.
remove(k) Removes the mapping of Key.
size() Returns size of Map.
values() Returns the List of values.
15. www.SunilOS.com 15
Concrete Collections
HashSet Set hash table
TreeSet SortedSet balanced binary tree
ArrayList List resizable-array
LinkedList List linked list
Vector List resizable-array
HashMap Map hash table
TreeMap SortedMap balanced binary tree
Hashtable Map hash table
16. www.SunilOS.com 16
ArrayList implements List
public static void main(String[] args) {
o ArrayList v = new ArrayList();
o v.add(“One");
o v.add(“Two");
o v.add(“Three");
o Integer i = new Integer(4);
o v.add(i);
o Integer value = (Integer) v.get(3);
o System.out.println(“Index#3 value = " +
value);
}
17. www.SunilOS.com 17
Vector implements List
public static void main(String[] args) {
o Vector v = new Vector();
o v.add(“One");
o v.add(“Two");
o v.add(“Three");
o Integer i = new Integer(4);
o v.add(i);
o Integer value = (Integer) v.get(3);
o System.out.println(“Index#3 value = " +
value);
}
18. www.SunilOS.com 18
ArrayList – read all elements
public static void main(String[] args) {
o ArrayList v = new ArrayList();
o v.add(“One");
o …..
o int size = v.size();
o for (int j = 0; j < size; j++) {
o System.out.println(j + " : " +
v.get(j));
o }
An object is converted into string by o.toString() method.
toString() method is defined in Object class.
20. www.SunilOS.com 20
ArrayList – read all elements
public static void main(String[] args) {
o ArrayList v = new ArrayList();
o v.add("Jay");
o …..
o Iterator it = v.iterator(); //Gets an iterator
o while(it.hasNext())
•Object o = it.next(); //Gets next element
•System.out.println(o);
•//System.out.println(it.next());
o }
}
22. www.SunilOS.com 22
Iterator
Set s = new TreeSet();
s.add(“123”); ..
Iterator it = s.iterator();
Vector v = new Vector();
v.add(“123”); ..
Iterator it = v.iterator();
23. www.SunilOS.com 23
Map – Hashtable and HashMap
public static void main(String[] args) {
o HashMap m = new HashMap();
o m.put("RN1001", 890);
o m.put("RN1002",900);
o m.put("RN1003",780);
o Integer i = (Integer)m.get("RN1002");
o Set keys = m.keySet();
o Collection vals = m.values()
25. HashMap vs Hashtable
HashMap
Asynchronous.
Not Thread Safe.
Permits NULL values as Key
and Value.
High performance.
Used in single-user
application.
HashTable
Synchronous
Thread Safe
Does not permit NULL
Slow performance
Used in multi-user application.
www.SunilOS.com 25
26. ArrayList vs Vector
ArrayList
Asynchronous.
Not Thread Safe.
High performance.
Grows by half of its size.
Used in single-user
application.
Vector
Synchronous
Thread Safe
Slow performance
Double the size when grow
Used in multi-user application.
www.SunilOS.com 26
Grows by half of its size Grows by double of its size
+ +
27. www.SunilOS.com 27
java.util.Enumeration
Vector v = new Vector();
Enumeration e = v.elements()
while (e.hasMoreElements()) {
System.out.println(e.nextElement());
}
Iterator and Enumeration both are same but Iterator has one
additional method ‘remove()’.
Enumeration can be used with only historical classes Vector,
Hashtable, etc.
28. Iterator vs Enumeration
Iterator
It is fail-fast.
Can remove an object.
Enumeration
Not fail-fast
Can’t remove an object
Available with historical
classes Vector, HashTable,
Stack, etc.
www.SunilOS.com 28
29. Fail-fast
If the collection is structurally modified at any time
after the Iterator is created, in any way except through
the Iterator's own remove() method, then Iterator will
throw the following exception:
oConcurrentModificationException.
www.SunilOS.com 29
30. www.SunilOS.com 30
Instantiate V/AL/HT/HM
Vector v = new Vector();//Default Capacity 10
Vector v = new Vector(20);//Initial capacity 20
Vector v = new Vector(20,15);//Initial capacity 20 and then
increase by 15
ArrayList al = new ArrayList();//Default Capacity 10
ArrayList al = new ArrayList(20);//Initial Capacity
Hashtable ht = new Hashtable();
Hashtable ht = new Hashtable(20);
int i = al.capacity();//Returns the current capacity of this
vector
int s = al.size();//Returns the number of components in this
vector
31. www.SunilOS.com 31
Synchronize Collection
Non-synchronized collections can be synchronized by
Collections class using following methods:
o Collection c = Collections.synchronizedCollection(c);
o List syncList = Collections.synchronizedList(al);
o Set syncSet = Collections.synchronizedSet(s);
o SortedSet syncSet =
Collections.synchronizedSortedSet(s);
o Map syncMap = Collections.synchronizedMap(m);
o TreeMap syncMap = Collections.synchronizedTreeMap(m);
32. Method equals() and hashCode()
Both methods are found in Object class.
They play imported role in identification and
searching of elements in Collections.
www.SunilOS.com 32
33. Marksheet – Search and Remove
List l = new ArrayList()
Marksheet m1 = new Marksheet();
l.add(m1);
Marksheet m2 = new Marksheet();
l.add(m2);
…
l.contains(m2);//uses equals()
l.remove(m2);//uses equals()
…
HashMap map = new HashMap();
map.put(m1,”M1”);//use hashCode()
www.SunilOS.com 33
:Marksheet
-rollNo:String
-name : String
-physics :int
-chemistry :int
-maths :int
+getRollNo():String
+setRollNo()
+getPhysics ():int
+setPhysics ()
+getChemistry():int
+setChemistry()
+getMaths():int
+setMaths()
34. Overriding equals() and hashCode()
equals() is used to search or remove an object in a Collection.
hashCode() returns an integer that uniquely identifies an
object in Hash Collections.
If two objects are equals by equals() method then their hash
code produced by hashCode() method must be same.
If equals() method is overridden then it is recommended to
override hashCode() method to maintain uniqueness on an
object in the collection.
www.SunilOS.com 34
35. Marksheet: equals() and hashCode()
Here are overridden methods of Marksheet class
public boolean equals(Object o) {
if (o == null) return false;
if (!(o instanceof Marksheet)) return false;
Marksheet other = (Marksheet) o;
return this.getRollNo().equals(other.getRollNo());
}
public int hashCode() {
return rollNo.hashCode();
}
www.SunilOS.com 35
36. Sorting
Framework provides two interfaces to sort the
collection.
Comparable and Comparator interfaces are used to compare
same type of objects.
Collections.sort() method uses either interface to
sort elements of a collection.
Sortable Class can implement Comparable interface and
provides natural ordering using primary key attribute.
Sortable Class may have multiple Comparators, comparing on
different attributes.
www.SunilOS.com 36
37. Sorting ( Cont. )
A collection storing objects of Sortable Class, can be sorted by
Collections.sort() method.
// Sorts using Comparable
Collections.sort(c)
// Sorts using Comparator object
Collections.sort(c, comparator)
www.SunilOS.com 37
38. Comparable Interface
It does natural ordering.
It uses primary key to order collection.
public int compareTo(Marksheet m){
o return rollNo.compareTo(m.rollNo);
}
ArrayList marksheets = new
ArrayList();
marksheets.add(new Marksheet());
marksheets.add(new Marksheet());
marksheets.add(new Marksheet());
Collections.sort(marksheets);
www.SunilOS.com 38
:Marksheet
-rollNo:String
-name : String
-physics :int
…
+compareTo(Marksheet m):int
+getRollNo():String
+setRollNo()
+getPhysics ():int
+setPhysics ()
+getChemistry():int
+setChemistry()
+…..
:Comparable
39. Comparator Interface
One class may have multiple
comparators.
Number of comparators are depending on
number of attributes to be sorted.
If Marskheets are sorted ascending by
‘name’ attribute then OrderByName
comparator is created.
If Marskheets are sorted by ascending and
descending by ‘name’ attribute then
OrderByNameAsc and
OrderByNameDesc comparators are
created.
More attributes are required to be sorted,
create more comparators.
www.SunilOS.com 39
:OrderByName
+compare(Marksheet m1,
Marksheet m2) : int
:Comparator
40. Comparator Interface ( cont.)
class OrderByName implements Comparator<Marksheet>{
public int compare(Marksheet m1,Marksheet m2){
return m1.getName().compareTo(m2.getName());
}
}
class OrderByMaths implements Comparator<Marksheet>{
public int compare(Marksheet m1,Marksheet m2){
return m1.getMaths() - m2.getMaths());
}
}
Collections.sort(marksheets, new OrderByName());
Collections.sort(marksheets, new OrderByMaths());
www.SunilOS.com 40
41. Return value ( -ve, 0 , +ve )
Methods compare() and compareTo(), both
return integer value that can be –ve, 0 or +ve.
o -ve indicates current (first) object is smaller than second
one.
o 0 indicates both are equals.
o +ve indicates current (first) object is greater than second
one.
www.SunilOS.com 41
50. Synchronized Collection V/S Concurrent Collection
Synchronized Collections are
slow in performance
Multiple threads can access a
synchronized collection
sequentially. Only one thread
can access the collection at a
time.
Permits null values
Synchronized Collection locks
the entire collection.
Static synchronized methods
of Collections class are used to
make a collection synchronize.
Concurrent Collections are
fast in performance
Multiple threads can access a
concurrent collection
concurrently. Multiple threads
can access the collection at a
time.
It does not permit null values.
Concurrent Collection does
not lock the entire collection,
it does lock only one element
at a time. In other words, each
element has a separate lock.
www.SunilOS.com 50
51. Concurrent Collection Key Interfaces
BlockingDeque
o LinkedBlockingDeque
o LinkedBlockingQueue
BlockingQueue
o ArrayBlockingQueue
o SynchronousQueue
o PriorityBlockingQueue
ConcurrentMap
o ConcurrentHashMap
ConcurrentNavigableMap
o ConcurrentSkipListMap
TransferQueue
o LinkedTransferQueue
www.SunilOS.com 51
52. Concurrent Collection
public class TestHashMap extends Thread {
private static ConcurrentHashMap<String, Integer> hm =
new ConcurrentHashMap<String, Integer>();
public void run() {
hm.put("Four", 4);
}
public static void main(String[] args) {
hm.put("One", 1);
hm.put("Two", 2);
hm.put("Three", 3);
TestHashMap t1 = new TestHashMap();
t1.start();
for (Object o : hm.entrySet()) {
System.out.println(o);
}
System.out.println(hm);
} www.SunilOS.com 52
54. java.util.Stream
Stream is a series of objects.
Source of a stream is an Array, Collection, or Other I/O
source.
Stream does not store data, it does only intermediate
operations.
It can filter and manipulate the elements of its source.
Streams are lazy, the source and intermediate operations do
nothing until objects are needed by the terminal operation.
www.SunilOS.com 54
55. Steams vs Collection
It does not store data
It is read-only
It can only be read once
Elements can not be directly
accessed
It stores data
It is read and write both
It can be read multiple times
Elements can be directly
accessed
i = list.get(0)
www.SunilOS.com 55
58. Intermediate Operations
map() -It maps a function to a stream and changes elements
of the stream
filter() - It filters element of the stream
distinct() - It removes duplicate elements from the stream
sorted() - It sorts elements of the stream
limit() - It limits and returns the stream according to the given
max size parameter
skip() - It skips the given N elements of the stream
www.SunilOS.com 58
59. Terminal operations
collect() - It converts an stream into collection
toArray() - It converts a stream into array
count() -It returns the count of the elements in the stream
reduce() - It reduces the elements of the stream according to the given identity value.
min() - It returns the minimum element of the stream according to the given
comparator
max() - It returns the maximum element of the stream according to the given
comparator
anyMatch() - It will return any matched element according to the matched predicate. if
the stream is empty then return false
allMatch() -It will return all the matched elements from a stream. returns true if the
stream is empty.
noneMatch() - It returns the matched elements of the predicate. returns true if the
stream is empty
findAny() - It returns an optional describing some elements of the stream
findFirst() - It returns the first elements of the stream.
www.SunilOS.com 59
60. How to create a Stream
List<String> items = Arrays.asList("One",
"Two", "Three", "Three", "Four");
//Create Stream
Stream<String> stream = items.stream();
// Print all elements from stream
stream.forEach(e -> {
System.out.println(e);
});
www.SunilOS.com 60
62. Disclaimer
This is an educational presentation to enhance the skill
of computer science students.
This presentation is available for free to computer
science students.
Some internet images from different URLs are used in
this presentation to simplify technical examples and
correlate examples with the real world.
We are grateful to owners of these URLs and pictures.
www.SunilOS.com 62