HashMap
HashMap implements Map interface which maps key
to value. It is not synchronized and is not thread safe. Duplicate keys are not
allowed and null keys as well as value are allowed.
HashMap<Interger,String> empHashmap=new
HashMap<Integer,String>();
empHashmap.put(1,"Kameshwar");
empHashmap.put(2,null); // This will work fine
Hashtable
Hashtable implements Map interface which maps key
to value. It is synchronized and thread safe. Duplicate keys are not allowed
and null key is also not allowed.
Hashtable<Interger,String> empHashmap=new Hashtable<Integer,String>();
empHashmap.put(1,"Kameshwar");
empHashmap.put(2,null); //not
allowed and will throw NullPointer exception at run time
Hashtable vs HashMap:
Parameter
|
HashTable
|
HashMap
|
Synchronized
|
Yes
|
No
|
ThreadSafe
|
Yes
|
No
|
Performance
|
Due to theadSafe and
Synchronized, it is often slower than HashMap
|
In single threaded environment, it is much
faster than Hashtable. So if you do not work in multi thread environment
,then HashMap is recommended
|
Null
key
|
Do
not allow
|
Allows null key as well as values
|
Fail
fast
|
enumeration in Hashtable
is not fail fast
|
Iterator in HashMap
is fail fast
|
Extends
|
It extends Dictionary
class which is quite old
|
It
extends AbstractMap class
|
Alternative
|
No
alternative
|
You can use ConcurrentHashMap for multi thread
environment
|
Some important points need
to be discussed.
- Synchonized
meaning only one thread can modify one table at one point of time. When
any thread perform update operation on hashtable then it acquires lock on
it and other threads have to wait for lock to be released.
- Fail-fast
iterator means if one thread is iterating over HashMap and other thread
trying to modify HashMap structurally it will throw ConcurrentModification
Exception and fail immediately. Structurally modification means inserting
or deleting elements that can change structure of map.
Can we
synchronize HashMap?
Yes, We can synchonized a HashMap also with
the help of Collections.synchonizedMap(hashmap) so HashMap can be synchronized
by using below code.
Map
map=Collections.synchonizedMap(hashmap)
No comments:
Post a Comment