简介
源码分析
HashMap是JAVA抽象出来存储键值对的集合,它的底层是哈希表,有哈希表就会有冲突,所以HashMap用单链表解决冲突,也就是拉链法。
HashMap是不安全的,在多线程的环境下可用ConcurrentHashMap,或者利用Collections工具类中的同步方法。先不急于说明其他的,我们先来分析一下单链表的构造static class Entry implemen...
分类:
其他好文 时间:
2015-07-20 16:23:29
阅读次数:
103
哈希函数:将一个哈希表中的关键字映射成该关键字对应地址的函数。而hash函数应尽量减少冲突哈希表建立了关键字和存储地址的映射。哈希函数的方法:直接定址法,除留余数法,数字分析法,平方取中法,折叠法处理冲突的方法开放定址法:线性探测(容易聚集和堆积)平方探测拉链法:
分类:
其他好文 时间:
2015-07-20 10:43:01
阅读次数:
116
散列表实现的方法最主要的有两种。一、拉链法二、线性探测法最基本的Put和get操作(注意:内存中是并行的数组,一条保存Keys 一条保存values)线性探测法比较麻烦的是删除操作,代码如下resize操作
分类:
其他好文 时间:
2015-06-01 16:19:32
阅读次数:
139
1.HashMap的数据结构 数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表,哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法——拉链法,....
分类:
其他好文 时间:
2015-05-09 01:05:10
阅读次数:
167
哈希表结合了数组和链表的特点,使其寻址、插入以及删除操作更加方便。哈希表的过程是将关键字通过某种哈希函数映射到相应的哈希表位置,即对应的哈希值所在哈希表的位置。但是会出现多个关键字映射相同位置的情况导致冲突问题,为了解决这种情况,哈希表使用两个可选择的方法:拉链法和开放寻址法。
Nginx 的哈希表中使用开放寻址来解决冲突问题,为了处理字符串,Nginx 还实现了支持通配符操作的相关函数,...
分类:
其他好文 时间:
2015-01-06 23:11:57
阅读次数:
427
在《算法》中的散列表一节,在用拉链法实现散列表的API时要求实现以下一个方法:public Iterable keys()我们知道Iterable是一个接口,那么一个方法怎么会返回一个接口呢?在《Effective Java》中第52条为“通过接口引用对象”as parameter types. M...
分类:
编程语言 时间:
2014-12-10 22:41:08
阅读次数:
270
记录了HashMap也来看看Hashtable吧,最近打算换份实习,所以想看看书回顾一下,不然就快记不得了.....囧啊囧啊,记性太差怎么破???Hashtable里面的一些变量:Entry[] table :HashTable采用"拉链法"实现哈希表,每一个Entry代表了一个键值对(key-va...
分类:
编程语言 时间:
2014-10-20 11:30:20
阅读次数:
279
Hash表(Hash Table)
hash表实际上由size个的桶组成一个桶数组table[0...size-1] 。当一个对象经过哈希之后,得到一个相应的value , 于是我们把这个对象放到桶table[ value ]中。当一个桶中有多个对象时,我们把桶中的对象组织成为一个链表。这在冲突处理上称之为拉链法。
负载因子(load factor)
...
分类:
其他好文 时间:
2014-10-10 00:57:33
阅读次数:
3011
一、基本原理:假设我们使用一个下标范围比较大的数组来存储元素。设计一个函数(哈希函数,也叫做散列函数),使得每个元素的关键字经过函数运算得到一个函数值(即数组下标),于是用这个数组单元来存储这个元素。通过函数值即数组下标就可以查找数据元素了。直接定址”与“..
分类:
其他好文 时间:
2014-09-02 18:03:55
阅读次数:
276
对于Hash,我们是怎样来处理冲突的。现在就来介绍一些经典的Hash冲突处理的方法。主要包括
(1)开放地址法
(2)拉链法
(3)再哈希法
(4)建立公共溢出区...
分类:
其他好文 时间:
2014-09-01 22:52:13
阅读次数:
217