1.在jDK 5开始增加了线程安全的Map接口 ConcurrentMap
2.Hashtable是JDK 5之前唯一线程安全的内置实现。特别说明的是Hashtable的t是小写的,原因(暂不明确),
ConcurrentHashMap是HashMap的线程安全版本,ConcurrentSkipListMap是TreeMap的线程安全版本。
ConcurrentHashMap和ConcurrentSkipListMap应尽量多的使用。
HashMap的原理:
我们从头开始设想,要将对象存放在一起,如何设计这个容器。有两条路可走,一种是采用分格技术,每一个对象存放于一个格子中没这样通过对格子的编号就能取到或者遍历对象;另一种技术就是采用串联的方式,各个对象串联起来,这需要各个对象至少带有下一个对象的索引。显然第一种就是数组的概念,第二张就是链表的概念,所有的容器的实现其实都是基于这两种方式的,不管是数组还是链表,或者二者具有。 HashMap就是采用的数组方式。
有了存取对象的容器后还需要以下两个条件才能完成Map所需的条件。
1.能够快速定位元素:Map的需求就是能够根据一个查询条件快速得到需要的结果,所以这个过程需要的就是尽可能的快
2.能够自动扩充容量:显然对于容器而然,不需要人工的去控制容器的容量是最好的,这样对于外部使用来说越少知道底部细节越好,不仅使用方便,也越安全。
3.TreeMap和HashMap的区别和共同点
1.实现:TreeMap:SortMap接口,基于红黑树,HashMap基于哈希散列表实现。
2.存储:TreeMap:默认按键的升序排序,HashMap是随机存储
3.遍历:TreeMap:Iterator遍历是排序的,HashMap是随机的
4.性能损耗:TreeMap插入和删除
5.键值对:TreeMap:键、值都不能为null HashMap只允许键值都为null
6.效率:TreeMap:效率低 HashMap:效率高。