Java Collections Framework
Collections are most widely concept in java. Most of the time I get confused, when to use, what type of collections. If its the same with you, this post would make an attempt to clear that confusion, I tried to list the parameters that can be used to make decision.
Topics:
Collections
Collections Interfaces
Collections Cheat Sheet
Collections Examples
Collection Framework:
Java Collection framework provides mechanism to store, retrieve and manipulate objects.
All collection interfaces and classes are present in java.util package.
|
Core Interfaces for Collections |
Collection is the root of the collection hierarchy
Sorted Set: A Set that maintain elements in sorted ascending order.
Sorted Map: A Map that maintains keys in sorted ascending order.
Decision to use which collection class depends on following factors:
- Ordered
- Duplicates
- Synchronized
- Not Ordered
Collection Interfaces:
Interfaces |
Definition |
has Duplicates |
List |
It’s
a data structure where stored objects can be accesible using index. |
Yes. |
Map |
Data
structure allows key value pair storage. |
No
duplicate keys are allowed.Values can be duplicate. |
Set |
it’s
a data structure that doesnot allow
duplicate storage of elements . Elements cannot be accessed using index. |
No.
Set doesnot allow duplicate elements |
Queue |
ordered in on a FIFO |
Yes. |
Deque |
ordered
elements in either LIFO and FIFO. Its
a double-ended-queue is a linear collection of elements that supports the
insertion and removal of elements at both end points |
Yes. |
Collection Cheat Sheet:
Ordered : Elements are stored in a order and when iterator is used
over this elements, user knows in what order elements can be retrieved.
Sorted : elements are stored in sorted order.This sorting order depends on natural ordering, or by a Comparator.
Thread safe: Methods are implemented using synchronized. this can be used in a multi threaded environment.
|
classes with collections. Maps doesn't implement interface Collection |
Below parameters can be used to make choice of what data structures can be used.
Collection
Name |
Implements
Interface |
Ordered |
Sorted |
synchronized
(Thread safe) |
When to
use it |
Array List |
List |
Yes |
No |
No |
1.
when retrieval/accessing elements is primary aim
2. Random access to elements using their index |
Vector |
List |
Yes |
No |
Yes |
when
elements thread safety is more
important with retrieval of elements |
Linked List |
List,
Deque |
Yes |
No |
No |
When
insertion and deletion is primary task, not accessing the elements. |
HashSet |
Set |
No |
No |
No |
If
the requirement is only to have elements unique. |
LinkedHashSet |
Set |
Yes |
No |
No |
If
the requirement is to returns elements in the same order of insertion |
TreeSet |
Set |
Yes |
Yes |
No |
Elements
needs to be stored in sorted order. Default is ascending order |
HashMap |
Map |
No |
No |
No |
If
the requirement is faster access. No synchronization needed |
HashTable |
Map |
No |
No |
Yes |
Used
for faster access. No null keys are allowed |
LinkedHashMap |
Map |
Yes |
No |
No |
If user wants retrieve keys is the
insertion order. Predictable iteration order is the requirement |
TreeMap |
Map |
Yes |
Yes |
No |
If
the requirement is sorted Map, with key value pair storage |
ArrayDeque |
Deque |
Yes |
No |
No |
No
Null values. Cannot access elements
using index. Can be used which allows efficient insertion and deletion at
both ends. |
PriorityQueue |
Queue |
Yes |
No |
No |
No
Null values. Item that is removed from
the queue is not necessarily the first one that was added. Rather, it is
whatever item in the queue has the highest priority. |
Collection Examples:
All the examples are compiled on java 1.7 update 21
ArrayList Example:
Standard Arrays are
fixed cannot grow and shrink in size
. ArrayList solves this problem.
ArrayList can dynamically increase or decrease in size. It has a initial size, When this size is exceeded,
the collection is automatically enlarged. When objects are removed, the array
may be shrunk. It can be asssed with indexes. |
import java.util.ArrayList;
public class ArrayListExample {
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<Integer>(10);
arrayList.add(45);
arrayList.add(48);
arrayList.add(4);
// retrieve an element using index
System.out.println( " Accessing using index " + arrayList.get(2) );
arrayList.remove(1);
// let us print all the elements
System.out.println( " print ArrayList elements " + arrayList) ;
}
}
HashSet Example:
import java.util.HashSet;
public class HashSetExample {
public static void main(String[] args) {
HashSet<Integer> hashset = new HashSet<Integer>();
//returns true if the element is inserted
if ( hashset.add(34) )
System.out.println(" Element is inserted");
else
System.out.println("Element Cannot be inserted, duplicate");
if ( hashset.add(34) )
System.out.println(" Element is inserted");
else
System.out.println("Element Cannot be inserted, duplicate");
}
}
TreeMap Example:
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
public class TreeMapExample {
public static void main(String[] args) {
TreeMap<String,Integer> treemap = new TreeMap<String,Integer>();
treemap.put("first", 1);
treemap.put("second", 2);
treemap.put("three", 3);
treemap.put("four", 4);
System.out.println(treemap);
Set<Entry<String, Integer>> entrySet = treemap.entrySet();
Iterator<Entry<String, Integer>> iterator = entrySet.iterator();
while(iterator.hasNext())
{
Map.Entry me = (Map.Entry)iterator.next();
System.out.println(me.getKey());
}
}
}
Good to know facts:
=======================================================
1. When to use
Hash Map :Inserting , deletion are required.
Tree Map: To traverse already sorted list
=======================================================
List of thread safe classes in collection
Vector, Hash table, Stack are synchronized classes can be termed as thread-safe..
=======================================================
What is difference between HashMap vs Hashtable
------------------------------------------------------------------------------------
HashMap | HashTable
------------------------------------------------------------------------------------
Allows null keys and null values | Doesn't allow null values
Non Synchronized(not thread safe) | Synchronized (thread safe)
===================================================
Sets doesn't allow duplicates.
===================================================
Maps duplicate keys are not allowed.
=================================================