Java中Map相关的快速查找算法与性探讨
作者:网络转载 发布时间:[ 2013/12/27 11:38:12 ] 推荐标签:开发 java
HashMap的put原理是这样的:
1、首先对key采用hashCode()方法进行散列化,是将key转换生成一个int值,相同的key肯定会生成相同的int值,并对该int值进行hash计算得到hash值。
2、通过hash值得到Entry数组的下标,然后通过该下标,得到已经存入的数据,将已经存入的数据的key和hash进行比对,若相同证明是重复,则忽略。
3、若不相同,则通过addentry()方法将数据存入该数组的下标中,同时存入的还有key、hash值。
用一句话说来是,通过待存入的key的hash值计算出数组的下标,并根据该下标提取已经存入的值,将两者进行比对,若相同则忽略,不同则put进去。
现在知道为什么Map中的key是性的原因了吧? 这与Map在put时兢兢业业检查的努力是分不开的。
假设有一个key为1,value为"zhangSan",经过hash之后成为101,那么这个101作为数组的下标,然后将hash=101、key=1及value="zhangSan"的值封装成实体对象存放到该数组的101下标处。因为不同的key会产生不同的hash值,这也是为什么HashMap不排序的原因!
get:
public V get(Object key) {
if (key == null)
return getForNullKey();
int hash = hash(key.hashCode());
for (Entry<</SPAN>K,V> e = table[indexFor(hash, table.length)];
e != null;
e= e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
return e.value;
}
return null;
}
那么通过key提取值时,当然先要通过该key计算出hash值来,再通过这个hash值作为下标提取出对应的实体对象所容纳的value来。
同时加了必要的判断来确保提取出正确的数值来。
哈哈,在一个确定的城市里,领到了一个确定的门牌号,相比在茫茫人海中漫无目的的捞针,知道为何提取数据如何之快了吧!
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11