现在的位置: 首页 > 综合 > 正文

Hashtable,HashMap实现原理

2013年09月17日 ⁄ 综合 ⁄ 共 491字 ⁄ 字号 评论关闭

    昨天看了算法导论对散列表的介绍,今天看了一下Hashtable, HashMap这两个类的源代码,并参考了网上的一些观点,对它们的实现有了大概的理解。原来hashtable里的key-value还是用数组存储的,数组元素是Entry<K,V>类型,同一数组索引下储存的实质是一个Entry链表,Entry中的next值指向下一个Entry.当把key-value放进hashtable时,会根据key的hashcode值来计算应储存的数组索引,根据这一索引寻找Entry链表中是否存在相同key值的entry, 如果有就把该entry里的value代替,否则生成新的entry存储key-value, 并把它放置在链表头。若果entry的数量超出hashtable的容量,hashtable会生成新的更大容量的数组并重新计算原有的entry的位置。

   Hashtable和HashMap的主要区别在于Hashtable对数据的操作是线程安全的,但会有一定的额外开销;它们根据key的hashcode计算方法也不同;HashMap的key可以是null, 存储在内部数组的第一个位置里。

抱歉!评论已关闭.