哈希表的实现 博客分类: 数据结构 哈希表hash
程序员文章站
2024-03-18 17:19:10
...
实现一个哈希表,首先我们要知道哈希表可以干什么,包含什么方法,实现哪些功能。
哈希表又叫散列表,是根据关键码值(Key, value)而直接进行访问的数据结构。oracle文档里面提到,用哈希表进行检索和存储,key首先要完成hashcode方法,以确定这个key属于哪个区间,也就是说具有相同hashcode的被放在同一块区间里,hashcode往往是取模得出的结果。
确定了位置,我们还要解决冲突问题,如果表中已经存在当前要存的key,我们应该先删除以前的那个key,先后把新的key加入到表中,这里我们要做两步,判断是否存在相同的key,如果存在就删除以前的key,注意的是这里说的key实际上是<key, value>对。
实现代码如下
参考资料:Cracking the Coding Interview,Gayle Laakmann McDowell
哈希表又叫散列表,是根据关键码值(Key, value)而直接进行访问的数据结构。oracle文档里面提到,用哈希表进行检索和存储,key首先要完成hashcode方法,以确定这个key属于哪个区间,也就是说具有相同hashcode的被放在同一块区间里,hashcode往往是取模得出的结果。
确定了位置,我们还要解决冲突问题,如果表中已经存在当前要存的key,我们应该先删除以前的那个key,先后把新的key加入到表中,这里我们要做两步,判断是否存在相同的key,如果存在就删除以前的key,注意的是这里说的key实际上是<key, value>对。
实现代码如下
import java.util.LinkedList; public class HashDemo<K, V> { private final int MAX_SIZE = 50; LinkedList<Element<K,V>>[] items; public HashDemo() { items = new LinkedList[MAX_SIZE]; } /* 官方实现hashcode代码 public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value.length; i++) { h = 31 * h + val[i]; } hash = h; } return h; } */ public int hashCodeOfKey(K Key) { return Key.toString().length() % items.length; } public void put(K key, V value) { int h = hashCodeOfKey(key); if(items[h] == null) items[h] = new LinkedList<Element<K,V>>(); //检查当前的key是否已经存在 LinkedList<Element<K, V>> coll = items[h]; for(Element<K,V> e : coll) { //如果存在就删除以前的元素 if(e.equivalent(key)) { coll.remove(e); break; } } //把新的元素加到表中 Element<K, V> element = new Element<K, V>(key, value); coll.add(element); } public V get(K key) { int h = hashCodeOfKey(key); if(items[h] == null) { return null; } LinkedList<Element<K, V>> coll = items[h]; for(Element<K,V> e : coll) { if(e.equivalent(key)) return e.getValue(); } return null; } } //Element类帮助我们处理表中的元素 class Element<K, V> { private K key; private V value; public Element( K key, V value) { this.key = key; this.value = value; } public boolean equivalent(K k) { return key.equals(k); } public K getKey() { return key; } public V getValue() { return value; } }
参考资料:Cracking the Coding Interview,Gayle Laakmann McDowell
推荐阅读
-
哈希表的实现 博客分类: 数据结构 哈希表hash
-
centos6.5使用yum安装mysql5.6实现不同磁盘的表分区 博客分类: centosmysql centosmysql5.6
-
【转】一些常用的hash函数 博客分类: hash hash哈希
-
数据库锁表之后的解锁实现 博客分类: DataBase 数据库解锁释放锁oracle锁
-
数据库锁表之后的解锁实现 博客分类: DataBase 数据库解锁释放锁oracle锁
-
C语言程序设计--算法与数据结构之 哈希表的查找(输出查找次数和查找情况)
-
哈希表 我的初中 博客分类: 数据结构 数据结构哈希表冲突
-
哈希表 我的初中 博客分类: 数据结构 数据结构哈希表冲突
-
剖析淘宝TDDL——Matrix层的分库分表配置与实现 博客分类: 技术总结其他开源框架 TDDLMatrix层分库分表配置实现
-
图 邻接表 Java 实现 博客分类: 数据结构——图 图邻接表Java实现