解析HashMap的存储方式_JAVA_编程开发_程序员俱乐部
中国优秀的程序员网站
程序员频道
CXYCLUB技术
地图
最新资讯
|
百度新闻
|
GOOGLE地图
|
RSS订阅
|
更多
职场话题
生活休闲
恋爱交友
程序人生
学习进修
职业发展
项目管理
求职面试
程序员创业
JAVA
.NET
C/C++
Ruby
Delphi
JavaScript
PHP
ASP
JSP
HTML
XML
移动开发
开发工具
其他
编程开发
数据库
操作系统
新闻资讯
互联网
非技术区
非技术区
生活休闲
恋爱交友
职业发展
求职面试
程序人生
移动开发
开发工具
DB2
MySql
Sybase
开发
JAVA
.NET
PHP
C/C++
数据库
SQL Server
Oracle
互联网
运营
推广
营销
SEO
系统
Linux
Unix
Windows
资讯
动态
产品
人物
创业
职场
学习
管理
热搜:
回溯
循环
SWT
class
instance
摄像头
NullPointerException
二进制
异步
同步
编码
哈夫曼
冒泡排序
下拉联动
序列化
回溯
循环
SWT
class
instance
摄像头
NullPointerException
二进制
异步
同步
更多>>
您所在的位置:
程序员俱乐部
>
编程开发
>
JAVA
> 解析HashMap的存储方式
解析HashMap的存储方式
2013/11/4 18:35:40 轻指飞扬
程序员俱乐部
我要评论(
0
)
摘要:
Java集合中,HashMap的点名率很高,这归功于它的Key-Value键值对结构,还有它不错的效率。HashMap由于运用Hash算法定位并配合它的存储方式使它有了不错的效率,理解它的存储方式对我们自己日常开发也有启发作用,就让我们一同来学一些吧~首先看它的构造方法HashMap()构造一个具有默认初始容量(16)和默认加载因子(0.75)的空HashMap。HashMap(intinitialCapacity)构造一个带指定初始容量和默认加载因子(0.75)的空HashMap
标签:
has
Map
Hash
方式
解析
Java集合中,HashMap的点名率很高,这归功于它的Key-Value键值对结构,还有它不错的效率。HashMap由于运用Hash
算法
定位并配合它的存储方式使它有了不错的效率,
理解
它的存储方式对我们自己日常开发也有启发作用,就让我们一同来学一些吧~
首先看它的构造方法
HashMap()
构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。
HashMap(int initialCapacity)
构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap。
HashMap(int initialCapacity, float loadFactor)
构造一个带指定初始容量和加载因子的空 HashMap。
我们来看一下HashMap(int initialCapacity, float loadFactor)构造方法吧
在这个构造方法中可以看出,HashMap是用一个名为table的数组实现的,其数组元素是Entry,由于数组长度是固定的,而HashMap这种集合肯定是需要长度可变的,所以我们可以看到
构造器
中有capacity、loadFactor、threshold等几个变量的操作形成一套变换table数组长度的算法。
数组元素Entry到底是什么东西?是不是它使我们可以通过Key定位到Value呢?
Entry好像结构很简单,我们看到了key和value,键值对对应的功能就是出自于这两个家伙。等等我们还看到什么一个名为next的Entry<K,V>变量,这让我们联想起Entry是不是会作为链表元素出现呢?可他已经是数组元素了啊?
好吧,我们来看看HashMap的put方法
看到他的覆盖条件了吗?两个key的
has
h值一样还不够,还必须要equal的。读到这边我们就知道hash值相等的两个值可能并不equal。就是说多个不同的元素可能拥有同一hash值,就是说多个不同的元素会在同一个数组元素中。这时我们想到了前面的Entry的next变量。看到覆盖处理中for
循环
的迭代条件for (Entry<K,V> e = table[i]; e != null; e = e.next)与覆盖条件 if (e.hash == hash && ((k = e.key) == key || key.equals(k))) 我们就可以确认,它们确实是用链表实现的。
再让我们来看看它addEntry方法吧,它是怎么处理链表的
看到这里大家应该都知道了吧~
HashMap的存储方式用图片来展示一下
class='magplus' title='点击查看原始大小图片' />
大小: 20.1 KB
大小: 25.5 KB
大小: 25.7 KB
大小: 17.3 KB
大小: 33.3 KB
查看图片附件
上一篇:
谈谈C#中的 Dispose 和 Finalize
下一篇:
我对ThreadLocal的理解
相关文章
·
解析HashMap的存储方式
·
详细解析Java中抽象类和接口的区别
·
TCP连接的两种简单传输方式
·
HashMap的遍历
·
java中判别字符串是否是数字的几种方式
·
理想中的SQL语句条件拼接方式
·
深入浅出HashMap
·
Java Dom解析xml
·
iOS抗锯齿的方式
·
Android事件处理的2种方式:监听器
查看所有评论(
0
)
我要评论
发表评论
用户名:
匿名
最新文章
解析HashM..
Linux 安..
·
我对ThreadLocal的理解
·
解析HashMap的存储方式
·
CSV Reader
·
Linux 安装JDK1.7详细说明
·
详细解析Java中抽象类和接口的区别
·
将依赖的jar包inlining到另外一
·
面授竞赛试题
·
网页定时器
·
try-catch-finally中re
·
Java IO:程序修改文件权限
·
synchronized 用法
·
java中常见的异常
·
memcached简介及java使用方法
·
计时器Timer
·
lihao_关于JAVA软件开发
最新标签
回溯
循环
SWT
class
instance
摄像头
NullPointerException
二进制
异步
同步
今日热点
·
全面认识Eclipse中JVM内存设置
·
struts标签实现菜单动态级联
·
JDK1.6官方下载地址
·
SSH2整合-附源码
·
ActiveMQ 中的消息持久化(二)
·
研磨设计模式之抽象工厂模式-1
·
研磨设计模式之装饰模式-4
·
java博客系统源代码
·
研磨设计模式 封面show
·
超经典的设计模式文章
推荐文章
unable ..
老..
·
The last pack
·
unable to find valid
·
老三携剑出山,Swing法力
·
java poi 创建exc
·
Errors occurre
·
[linux]ubuntu下
·
java 两数相除 四舍五入
·
Java 调用远程webservice接
·
Hadoop学习全程记录——
·
JAVA 比较两张图片的相似
·
J2EE、JAVA开源版OA发布了(JO
·
在linux下用tomcat
·
异常ognl.OgnlExc
·
Eclipse设置Tomcat启动超时时
·
org.springfra
English
|
关于我们
|
诚聘英才
|
联系我们
|
网站大事
|
友情链接
|
意见反馈
|
网站地图
Powered by
程序员俱乐部
程序提供: HugoCMS 2.0
网站备案:苏ICP备11048748号-1