hashmap实现源码(hashmap api)
本文目录一览:
怎么看hashmap和hashtable的源码
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap准许空(Null)键值(Key),由于非线程安全,效率上可能高于Hashtable。我回答的通俗易懂把!!!
hashmap底层实现原理
hashmap底层实现原理是SortedMap接口能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。
如果使用排序的映射,建议使用TreeMap。在使用TreeMap时,key必须实现Comparable接口或者在构造TreeMap传入自定义的Comparator,否则会在运行时抛出java.lang.ClassCastException类型的异常。
Hashtable是遗留类,很多映射的常用功能与HashMap类似,不同的是它承自Dictionary类,并且是线程安全的,任一时间只有一个线程能写Hashtable
从结构实现来讲,HashMap是:数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的。
扩展资料
从源码可知,HashMap类中有一个非常重要的字段,就是 Node[] table,即哈希桶数组。Node是HashMap的一个内部类,实现了Map.Entry接口,本质是就是一个映射(键值对),除了K,V,还包含hash和next。
HashMap就是使用哈希表来存储的。哈希表为解决冲突,采用链地址法来解决问题,链地址法,简单来说,就是数组加链表的结合。在每个数组元素上都一个链表结构,当数据被Hash后,得到数组下标,把数据放在对应下标元素的链表上。
如果哈希桶数组很大,即使较差的Hash算法也会比较分散,如果哈希桶数组数组很小,即使好的Hash算法也会出现较多碰撞,所以就需要在空间成本和时间成本之间权衡,其实就是在根据实际情况确定哈希桶数组的大小,并在此基础上设计好的hash算法减少Hash碰撞。
通过实现原理及源代码分析HashMap该怎么用
HashMap
,都知道哪里要用
HashMap
,知道
Hashtable
和
HashMap
之间的区别
,那么
为何这道面试题如此特殊呢?是因为这道题考察的深度很深。
这题经常出现在高级或中高级
面试中。投资银行更喜欢问这个问题,甚至会要求你实现
HashMap
来考察你的编程能力。
ConcurrentHashMap
和其它同步集合的引入让这道题变得更加复杂。让我们开始探索的
旅程吧!