Differences in Collections
Difference between ArrayList & LinkedList
| ArrayList | LinkedList |
|---|---|
| 1) ArrayList internally uses a dynamic array to store the elements. | LinkedList internally uses a doubly linked list to store the elements. |
| 2) Manipulation with ArrayList is slow because it internally uses an array. If any element is removed from the array, all the bits are shifted in memory. | Manipulation with LinkedList is faster than ArrayList because it uses a doubly linked list, so no bit shifting is required in memory. |
| 3) An ArrayList class can act as a list because it implements List only. | LinkedList class can act as a list and queue oth because it implements List and Deque interfaces. |
| 4) ArrayList is better for storing and accessing data. | LinkedList is better for manipulating data. |
Difference between HashMap & HashTable
| HashMap | Hashtable |
|---|---|
| 1) HashMap is non synchronized. It is not-thread safe and can't be shared between many threads without proper synchronization code. | Hashtable is synchronized. It is thread-safe and can be shared with many threads. |
| 2) HashMap allows one null key and multiple null values. | Hashtable doesn't allow any null key or value. |
| 3) HashMap is a new class introduced in JDK 1.2. | Hashtable is a legacy class. |
| 4) HashMap is fast. | Hashtable is slow. |
| 5) We can make the HashMap as synchronized by calling this code | |
| Map m = Collections.synchronizedMap(hashMap); | Hashtable is internally synchronized and can't be unsynchronized. |
| 6) HashMap is traversed by Iterator. | Hashtable is traversed by Enumerator and Iterator. |
| 7) Iterator in HashMap is fail-fast. | Enumerator in Hashtable is not fail-fast. |
| 8) HashMap inherits AbstractMap class. |
Difference between HashMap,HashTable,SynchronizedHashMap and Concurrent HashMap
| Collection Type | Synchronization | Locking | No.Of Threads | Null Key & Values | Iterator | When To Use |
|---|---|---|---|---|---|---|
| HashMap | Not Synchronous | No lock | Multiple threads | One null key ,N no.of null values | Fail fast | Single Thread |
| HashTable | Synchronous | Object level lock | Single thread | Does not allow null key and null values | Fail Safe | Legacy class not recommended |
| Synchronized HashMap | Synchronous | Object level lock | Single thread | One null key , N no.of null values | Fail Safe | Multi Thread(Low Performance) |
| ConcurrentHashMap | Only write operations are synchronized | Segment level lock | 16 threads perform write and ‘N’ threads can perform read | Does not allow null key & values. | Fail Safe | Multi Thread((Better Performance) |
Difference between HashMap and TreeMap
| HashMap | TreeMap |
|---|---|
| It stores key-value pairs | It stores key-value pairs and sorts according to the natural ordering of its keys. |
| It uses hashing algorithm | TreeMap implements Red-Black tree implementation. |
| Time complexity for get() ,put() operation is O(1) by assuming the hash function dispers the elements properly among the buckets. | Time complexity for containsKey,get,put and remove operations is log(n). |
| HashMap allows one null value as key. | TreeMap doesn’t allow null key but values can be null. |
| HashMap is fast. | TreeMap performance is less than HashMap due to f=default sort in nature. |
| HashMap constructor takes bucket size. | TreeMap doesn’t have constructor to specify the size of the elements. |
Difference between Comparable and Comparator
| Comparable | Comparator |
|---|---|
| Natural Sorting Order | Customized Sorting |
| Java.lang | Java.util |
| compareTo() | Compare and equals() |
| Homogenous objects | Both Homogenous and Heterogeneous Objects |