前言
最近在敲Java代码的时候,发现小咸儿对于HashMap的使用不是很熟悉啊!
情景
推荐的情景:
推荐的HashMap应用场景是单线程运行环境,并且不需要遍历操作的场景。
其他的情景:
多线操作HashMap,我们通过加锁或者加入同步控制依然能正常应用HashMap,只是需要加上同步操作的代价。
内容
HashMap(键值对):基于哈希表实现,使用HashMap要求添加的键明确定义了hasCode()和equals(),为了优化hashMap空间的使用,可以调优初始容量和负载因子。hashmap适用于在map中插入,删除和定位元素。hashmap的结果是没有排序的的。
TreeMap:基于红黑树实现,TreeMap没有调优选项,该树总是处于平衡状态。treemap适用于按自然顺序或自定义顺序遍历键(key),TreeMap实现SortMap接口,能够把保存的额近路根据键排序,默认是按键值的升序排序,也可以指定排序的比较器。
参考链接:红黑树之原理和算法详细介绍
概括
1、Map是“键值对”映射的抽象接口
2、AbstractMap实现了Map中的绝大部分函数接口。他减少了“Map的实现类”的重复编码
3、SortedMap有序的“键值对”映射接口
4、NavigableMap是继承于SortedMap的,支持导航函数的接口
5、HashMap、HashTable、TreeMap、WeakHashMap这4个类是“键值对”映射的实现类,但是它们各有区别。
a.HashMap是基于“拉链法”实现的散列表。一般用于单线程程序中。
b.HashTable也是基于“拉链法”实现的散列表。一般用于多线程程序中。
c.WeakHashMap也是基于“拉链法”实现的散列表,它一般也用于单线程程序中。相比HashMap,WeakHashMap中的键是“弱键”,当“弱键”被GC回收时,它对应的键值对也会被从WeakHashMap中删除。而HashMap中的是强键。
d.TreeMap是有序的散列表,它是通过红黑树实现的。它一般用于单线程中存储有序的映射。
参考链接:Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
结语
其他的随着小咸儿学习的深入,在进行全面的总结。