`

哈希表的实现

阅读更多
实现一个哈希表,首先我们要知道哈希表可以干什么,包含什么方法,实现哪些功能。

哈希表又叫散列表,是根据关键码值(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
分享到:
评论

相关推荐

    《数据结构课程设计》设计哈希表实现电话号码查找系统

    问题描述: 设计哈希表实现电话号码查找系统。 基本要求: (1)设每个记录有下列数据项:电话号码、用户名、地址; (2)从文件中读取各记录,分别以电话号码和用户名为关键字建立不同的哈希表; (3)采用链地址法...

    哈希表应用 设计哈希表实现图书查找系统,完成相应的建表和查表程序。c语言课设

    设计哈希表实现图书查找系统,完成相应的建表和查表程序。从键盘输入各图书相关信息,分别以图书编号为关键字建立散列表。待填入哈希表的书号至少30个;构造合适的哈希函数。 (1)记录由外部输入。 (2)生成的哈希...

    C语言设计哈希表实现图书查找

    C语言设计哈希表实现图书查找系统,完成相应的建表和查表程序。从键盘输入各图书相关信息,分别以图书编号为关键字建立散列表。待填入哈希表的书号至少30个;构造合适的哈希函数。 1) 记录由外部输入。 2) 将生成...

    c + + 哈希表实现数字排序

    在这个特定的C++程序中,哈希表被用来实现一个数字排序算法,特别是针对大整数范围内的数据。程序的目标是处理多组测试数据,每组数据包括两个整数n和m,以及n个在[-500000, 500000]区间内的整数。使用哈希表可以...

    C语言基于哈希表实现通讯录.doc

    C语言基于哈希表实现通讯录 在本文中,我们将探讨使用C语言基于哈希表实现通讯录的方法。哈希表是一种高效的数据结构,能够快速地存储和查找数据。在本文中,我们将通过设计和实现一个通讯录系统,来展示哈希表的...

    哈希表实现

    ### 哈希表实现与电话号码查询:深入解析与C语言代码分析 #### 哈希表基础知识 哈希表是一种数据结构,它通过使用哈希函数将键(key)映射到值(value)的存储位置,从而提供快速的数据访问能力。哈希表在理想情况...

    哈希表实现电话号码查询系统

    数据结构的课程设计 哈希表实现电话号码查询系统

    C/C++哈希表实现电话号码查询系统

    哈希表是一种高效的数据结构,它通过特定的函数(哈希函数)将数据映射到一个固定大小的数组中,从而实现快速的插入、查找和删除操作。在本项目"用C++实现的电话号码查询系统"中,哈希表被用来存储电话号码及其对应...

    哈希表实现简单说明-附代码

    在压缩包中的"hash表学习"文件中,可能包含了关于哈希表实现的具体代码示例,包括哈希函数的定义、冲突解决策略的实现以及插入、查找和删除操作的算法。通过阅读和理解这些代码,你可以更深入地了解哈希表的实际应用...

    哈希表实现通讯录

    (1)每个人的信息至少包括姓名,...(2)假设人名为汉语拼音全拼形式,待插入哈希表的长度为你所在班级的人数。哈希函数用除留余数法构造,采用链地址法或二次探测再散列法解决冲突。 (3)完成菜单设计。操作有必要的提示。

    数据结构课程设计C++基于哈希表实现的通讯录系统源码+课程设计报告(高分项目).zip

    数据结构课程设计C++基于哈希表实现的通讯录系统源码+课程设计报告(高分项目).zip代码完整,报告全面,下载即用。 数据结构课程设计C++基于哈希表实现的通讯录系统源码+课程设计报告(高分项目).zip代码完整,...

    数据结构课程设计设计哈希表实现电话号码查询系统

    设计哈希表实现电话号码查询系统,不仅锻炼了数据结构的应用能力,也提升了问题解决和编程技能。通过这个项目,可以深入理解哈希表的工作原理,以及如何通过再哈希法解决冲突。此外,对于用户输入的处理、错误检查和...

    设计哈希表实现电话号码查询系统

    总结来说,这个电话号码查询系统通过哈希表实现了高效的记录存储和检索。哈希函数的设计和再哈希策略确保了冲突的最小化,使得数据查找和插入的时间复杂度接近O(1)。通过结构化的程序设计,用户可以方便地管理、查询...

    哈希表实现电话号码查询 报告.docx

    《哈希表实现电话号码查询》 在计算机科学中,数据结构是编程的基础,而哈希表作为一种高效的数据结构,广泛应用于各种信息查询系统。本报告主要探讨如何使用哈希表来实现电话号码的快速查询,以满足对学生信息管理...

    C语言基于哈希表实现通讯录

    本文为大家分享了C语言基于哈希表实现通讯录的具体代码,供大家参考,具体内容如下 1.需求分析 本演示程序用C语言编写,完成哈希表的生成,电话号码的插入、以及查找等功能。  (1)按提示输入相应的联系人的相关...

    哈希表实现电话号码查询 报告.pdf

    报告书主要围绕使用哈希表实现电话号码查询这一主题展开,涵盖了从需求分析、系统设计到实现和总结的全过程。以下是相关知识点的详细说明: 1. **哈希表(Hash Table)**:哈希表是一种数据结构,它通过计算一个...

    C++哈希表实现.zip

    总之,C++中的哈希表实现涉及到哈希函数设计、冲突解决策略的选择以及相关的插入、查找和删除操作。通过`HashTest.cpp`和`Hashtable.h`,我们可以深入理解这些概念,并通过实际代码来学习和测试哈希表的功能和性能。

    哈希表的设计与实现C语言

    哈希表是一种高效的数据结构,它通过特定的算法——哈希函数,将任意大小的键(key)映射到一个固定大小的数组中,从而实现快速查找、插入和删除操作。在C语言中,实现哈希表需要理解其基本原理,并掌握如何利用...

Global site tag (gtag.js) - Google Analytics