`
tangyanbo
  • 浏览: 268747 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

散列表

阅读更多

【散列表】

它是用一个散列函数把关键字 映射到散列表中的特定位置。
在理想情况下,如果元素e 的关键字为k,散列函 数为f,那么e 在散列表中的位置为f (k)。要搜索关键字为k
的元素,首先要计算出f (k),然后看 表中f (k)处是否有元素。如果有,便找到了该元素。如果没有,说明该字典中不包含该元素。
在前一种情况中,如果要删除该元素,只需把表中f (k)位置置为空即可。在后一种情况中,可 以通过把元素放在f (k)位置以实现插入。
此例是一个理想情况下的散列表,不考虑关键字重复的情况

 

public class HashList {	
	
	private String[] table;

	private int size;

	private int threshold;

	private static final int INITIAL_CAPACITY = 10;

	private static final int SIZE_INCREASE = 10;

	private static final float DEFAULT_LOAD_FACTOR = 0.75f;
	
	
	
	public HashList(){
		threshold = (int)(INITIAL_CAPACITY*DEFAULT_LOAD_FACTOR);
		table = new String[INITIAL_CAPACITY];
	}
	
	
	
	public HashList(String[] table){
		this.table = table;
	}
	
	
	
	
	/**
	 * Get the actual size of the list
	 * @return
	 */
	public int size(){
		return size;
	}
	
	/**
	 * for test
	 * @return
	 */
	public String[] getElements(){
		return table;
	}
	
	public boolean contains(String element) {
		if (element == null) {
			return false;
		}
		if (element.equals(table[getIndex(element)])) {
			return true;
		}
		return false;
	}
	
	public void add(String element){
		int index = getIndex(element);
		if(size>threshold){
			resize();
		}
		table[index] = element;
		size++;
	}
	
	
	
	//private methods
	/**
	 * resize the array
	 */
	private void resize(){
		String[] newArray = new String[table.length+SIZE_INCREASE];
		for(int i=0;i<table.length;i++){
			newArray[i] = table[i];
		}
		table = newArray;
		threshold = (int)(table.length*DEFAULT_LOAD_FACTOR);
	}
	
	/**
	 * get the index of the element
	 * @param element
	 * @return
	 */
	public int getIndex(String element) {
		return (element.hashCode() & 0x7FFFFFFF) % table.length;
	}	
}

 

 

分享到:
评论
2 楼 lileefun 2012-10-19  
cjf068 写道
没考虑碰撞。。。没意义

如果你有更多的建设行的话题,请提出。如果没有,请不要说出“没意义”这种本身没有意义的话。感谢楼主的热心分享。
1 楼 cjf068 2012-04-06  
没考虑碰撞。。。没意义

相关推荐

    课程设计 散列表 的设计与实现.

    散列表的设计与实现,课程设计. 设计散列表实现电话号码查找系统。 【基本要求】 1) 设每个记录有下列数据项:电话号码、用户名、地址; 2) 从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表; 3) 采用...

    散列表的建立和查找.zip

    为小于n个关键字设计一个散列表,使得查找成功时平均查找长度,要求完成相应的散列表建立和查找。假设关键字为整型数据,散列函数用除留余数法,采用开放定址法的线性探测法处理冲突。 1.从键盘输入关键字个数n及...

    散列表 (哈希表,线性探测再散列)

    ### 散列表(哈希表,线性探测再散列) #### 1. 散列表概念 散列表,又称哈希表,是一种基于数组结构的数据结构。它通过哈希函数将一组关键字映射到一个有限的连续地址集(即数组索引范围),并将这些关键字作为...

    基于 C/C++语言散列表实现的通讯录系统(课程设计报告+源码)

    【作品名称】:基于 C/C++语言散列表实现的通讯录系统(课程设计报告+源码) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目...

    散列表完成要求

    标题中的“散列表完成要求”指的是在数据结构课程设计中,学生需要全面理解和掌握散列表这一数据结构的设计和实现。散列表是一种常用的数据结构,它通过哈希函数将键(key)映射到数组的特定位置来实现快速访问。在...

    课程设计散列表的设计与实现

    散列表的设计与实现,课程设计. 设计散列表实现电话号码查找系统。 【基本要求】 1) 设每个记录有下列数据项:电话号码、用户名、地址; 2) 从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表; 3) 采用...

    散列表 课程设计

    散列表,又称哈希表,是计算机科学中一种非常重要的数据结构,用于高效地存储和检索数据。在本课程设计中,我们将深入探讨散列表的原理、设计与实现,涵盖其核心概念、常见算法以及实际应用。以下是关于散列表的详细...

    数据结构课设(散列表的设计与实现)

    在这个特定的课设中,我们关注的是散列表的设计与实现,这是一种高效的数据结构,提供了近似于常数时间的查找、插入和删除操作。散列表,也称为哈希表,是通过将关键字映射到数组索引来实现的,这种映射过程通常由...

    用散列表写的通讯录管理系统

    散列表在IT领域中是一种非常重要的数据结构,它在实现高效的数据存储和查找方面发挥着关键作用。在“用散列表写的通讯录管理系统”中,我们可以深入探讨如何利用散列表来构建一个快速、灵活的联系人管理解决方案。 ...

    数据结构 散列表

    散列表,又称哈希表,是数据结构中一种高效存储和检索数据的结构。它通过散列函数将关键字映射到数组的特定位置,实现快速的插入、删除和查找操作。在本系统的描述中,我们可以看到一系列与散列表操作相关的功能: ...

    散列表之链接法解决冲突

    散列表(Hash Table)是一种数据结构,用于存储键值对,通过特定的散列函数将键(Key)转化为数组索引,实现快速访问。在实际应用中,由于散列函数的不完美,不同键可能会被映射到相同的索引位置,这种现象称为...

    散列表的设计与实现

    散列表是一种存储结构,是和链表,数组不同的存储结构,其存储位置是有存储数据而定的,本题中,有学生姓名、住址和电话号码,输入学生姓名,将拼音字母转化成阿克斯码,将所有的阿克斯码加起来与20取余数得到的数字...

    数据结构课程设计散列表电话号码查询系统

    在本课程设计中,主要目标是构建一个基于散列表的电话号码查询系统,该系统能够高效地存储和检索用户信息,特别是电话号码。散列表作为一种数据结构,通过散列函数将键(如人名)映射到数组的特定位置,以此实现快速...

    散列表的设计与实现设计散列表实现电话号码查找系统。

    散列表是一种高效的数据结构,它通过哈希函数将键(key)映射到数组的索引位置,从而实现快速的查找、插入和删除操作。在这个电话号码查找系统中,散列表被用来存储电话号码和用户名作为关键字的记录,每个记录包含...

    数据结构课程设计(基于散列表的程序相近度检测系统和旅游交通查询系统)

    #### 一、基于散列表的程序相近度检测系统 **1. 需求分析** 对于两个C程序,需要设计并实现两种不同的基于散列表的检测算法,来计算这两个程序的相近度。具体来说,算法应该能够分析两个程序中的关键字出现频率,并...

    hash散列表的三种实现

    哈希表,也被称为散列表,是数据结构中一种高效的数据存储方式,它通过特定的哈希函数将关键字映射到一个固定大小的数组中,从而实现快速的查找、插入和删除操作。在IT领域,理解和掌握哈希表的实现方式至关重要,...

    C语言设计散列表实现电话号码查找系统

    电话号码查找系统是一种高效的数据检索工具,通过使用散列表(哈希表)来存储和查找用户信息,如电话号码、用户名和地址等。在C语言中实现这样的系统,需要掌握以下关键知识点: 1. **数据结构**:首先,我们需要一...

    散列表通讯录系统

    散列表通讯录系统是一种高效的数据管理系统,主要用于存储和检索个人联系信息。在C语言中实现这样一个系统,可以深入了解数据结构和算法的应用。本文将详细探讨散列表通讯录系统的实现原理、设计思路以及C语言编程中...

    计软实验一:图与散列表1

    实验主题涉及了图的属性计算和散列表的构建与性能分析。首先,我们来深入理解图的几个关键概念。在图实验中,你需要生成一种ER随机图,即Erdős-Rényi图,这是一种随机图模型,其中每对节点之间以一定概率连接。...

Global site tag (gtag.js) - Google Analytics