首先,集合分Collection和Map,Collection暂且不谈,Map主要有HashMap、LinkedHashMap、HashTable、CurrentHashMap。
HashMap是线程非安全的,效率比较高,可以存储空值的Key-value;
HashTable线程安全,效率相对较低,并且是最古老的map实现类,不可以存储空值的key-value
与HashTable相比CurrentHashMap是线程安全的,效率比HashMap差一点,但CurrentHashMap比HashTable更加高效一些,因为CurrentHashMap采用了更加高效的分段锁机制
详解:
①:HashMap和Hashtable的区别
HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。
HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行)。
HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。
另一个区别是HashMap的迭代器(Iterator)是fail