最近在详细的研究hashmap的内部结构和原理,终于豁然开朗,原来hashmap是那么的完美,数组和链表的结合体。
在学习hashmap之前,首先问大家几个问题,看看是否对hashmap有了解多少,咱们通过问题进行对hashmap的学习和探索。
1、HashMap 是不是有序的?不是有序的。
2、有没有有序的Map实现类呢?有 TreeMap 和 LinkedHashMap。
3、然后问TreeMap 和 LinkedHashMap 是如何保证它的顺序的? TreeMap 是通过实现 SortMap 接口,能够把它保存的键值对根据 key 排序,基于红黑树,从而保证 TreeMap 中所有键值对处于有序状态。LinkedHashMap 则是通过插入排序(就是你 put 的时候的顺序是什么,取出来的时候就是什么样子)和访问排序(改变排序把访问过的放到底部)让键值有序。
4、你觉得它们两个(Treemap和LinkedHashMap)哪个的有序实现比较好?如果你依然可以回答的话,那么继续问你,你觉得还有没有比它更好或者更高效的实现方式?
为什么要使用HashMap?
- HashMap是一个散列桶(数组和链表),它存储的内容是键值对key-value映射
- HashMap采用了数组和链表的数据结构,能在查询和修改方面继承了数组的线性查询和链表的寻址修改
- HashMap是非synchronized的,线程不安全,所以很快
- HashMap可以接受null键和值,而HashTable不行(因为equals()方法需要对象,因为HashMap是后出的api经过处理才可以)
HashMap的工作原理是什么?
了解HashMap工作原理之前我觉得有必要了解下hashcode和equals的小知识,见&