HashMap中put与get的实现
来源:互联网 发布:纹绣师上门软件 编辑:程序博客网 时间:2024/04/30 22:20
java容器中,Map是用来存储键值对的,Map是一个接口,java为他实现了好几种实现,有HashMap、LinkedHashMap、TreeMap、WeakHashMap等,一般情况下,HashMap是最常用的,因为他的存取速度最快,这和他存取的方法有关。下面我们来看看HashMap是如何实现快速存取的。
下面是《thinkinjava》中关于Map的一个实现:
这个实现用list来分别存储键和值,这个实现虽然简单,但不是一个恰当的实现,因为他创建了键和值的副本,而且在查询键值时,用的是list的方法,只能进行简单的线性查询,速度较慢。
HashMap的解决方案就是用散列来实现键和值的存取。散列将键保存在某处,以便能够很快找到。而存储一组元素最快的数据结构是数组,所以用他来表示键的信息。数组并不保存键的值,而是保存键的信息,注意,这里是散列的关键。
我们通过键对象生成一个数字,将其作为数组的下标,这个数就是散列码,由定义在Object中的、且可能由你的类覆盖的hashcode()方法生成。为了解决数组容量被固定的问题,不同的键可以产生相同的下标,也就是可以有冲突。因此,数组多大就不太重要了了,任何键总能在数组中找到他的位置。
于是,查询一个值的过程首先就是计算散列码,然后使用散列码查询数组,这样我们就不是线性查询数组,而是快速的跳到数组的某个位置,只对少数元素进行比较。这就是HashMap会如此快的原因。
下面是JDK1.6中HashMap的put和get的实现,我将以注释的形式解释它的编码
- HashMap中put与get的实现
- Java HashMap中put与get的工作原理
- HashMap的put,get方法实现!
- hashmap 中put实现的源代码
- 手写HashMap,实现put,get以及扩容
- HashMap的put和get方法原理
- hashmap的数据结构以及put和get
- HashMap.put/get方法
- JDK源码之解读hashMap 的put和get方法的实现原理
- HashMap的put、get方法分析与Hash冲突的分析、解决
- 浅谈HTTP中Get、Post、Put与Delete的区别
- Hbase中get与put的一些用法
- 浅谈HTTP中Get、Post、Put与Delete的区别
- 浅谈HTTP中Get、Post、Put与Delete的区别
- HashMap中的数据结构与get,put源码解析
- HashMap原理及put与get方法调用过程
- HashMap put() get()
- java hashmap的put函数实现源码
- linux api笔记(1):判断文件是否存在
- 一个超好用的favicon 图标在线制作地址,强烈推荐
- CLR线程池教程四大功能详解(1)
- CLR线程池教程四大功能详解(2)
- Hook按键消息修改
- HashMap中put与get的实现
- Windows CE LCD显示驱动简析(2)(基于WinCE5.0 SMDK2410 BSP的LCD显示设备驱动)
- Winedt 使用常识
- 黑人解放运动
- Parse Fatal Error at line 1 column 7: The processing instruction target matching "[xX][mM][lL]" is not allowed.
- oprofile的使用方法
- 不知所云
- Dojo Style Guide
- MessageBox 实现机制