HashMap的实现
2015-08-02 11:10
666 查看
1. HashMap的数据结构:HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
图片来自:http://www.iteye.com/topic/539465
2. HashMap中元素的存取:
往hashmap中put元素的时候,先根据key的hash值得到这个元素在数组中的位置(即下标),然后就可以把这个元素放到对应的位置中了。如果这个元素所在的位子上已经存放有其他元素了,那么在同一个位子上的元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾。从hashmap中get元素时,首先计算key的hashcode,找到数组中对应位置的某一元素,然后通过key的equals方法在对应位置的链表中找到需要的元素。
3.注意:
图片来自:http://www.iteye.com/topic/539465
2. HashMap中元素的存取:
往hashmap中put元素的时候,先根据key的hash值得到这个元素在数组中的位置(即下标),然后就可以把这个元素放到对应的位置中了。如果这个元素所在的位子上已经存放有其他元素了,那么在同一个位子上的元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾。从hashmap中get元素时,首先计算key的hashcode,找到数组中对应位置的某一元素,然后通过key的equals方法在对应位置的链表中找到需要的元素。
3.注意:
重写equals方法要同时重写hashCode方法。 按照散列函数的定义,如果两个对象相同,即obj1.equals(obj2)=true,则它们的hashCode必须相同,但如果两个对象不同,则它们的hashCode不一定不同。 如果两个不同对象的hashCode相同,这种现象称为冲突,冲突会导致操作哈希表的时间开销增大,所以尽量定义好的hashCode()方法,能加快哈希表的操作。
相关文章推荐
- c语言实现hashmap(转载)
- Lua教程(七):数据结构详解
- Ruby中Hash的11个问题解答
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构揭秘一
- Ruby简明教程之数组和Hash介绍
- 数据结构之Treap详解
- 在C#中生成与PHP一样的MD5 Hash Code的方法
- js中hash和ico的关联分析
- JavaScript数据结构和算法之图和图算法
- Javascript SHA-1:Secure Hash Algorithm
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- 理解php Hash函数,增强密码安全
- 解析WeakHashMap与HashMap的区别详解
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- HashMap总结