`
春之竹
  • 浏览: 23738 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

hash简易表

阅读更多

 

哈希表是结合数组跟链表的算法,可以说哈希表是一个装有链表的数组,他继承了数组易查找,链表易插入,删除的特点。

 

 

现假设有若干(0-99)学生,他们的学号从0-99中的随机整数,现在要将同学的学号放到哈希表中,并能通过学号得到对应的姓名。并能够进行查找,删除,插入。

则该表储存数据的形式如下所示。


插入值:将id除以10,得到的结果就是该元素数组索引号,如果该位置下还没有值,就将该值直接放入,如果该位置已有值就将该值放在最后一个元素的后面。相当与挂链。

查找,删除值:通过上面的方法,定位到某元素,然后对该元素进行操作。

rehash问题:因为这里的分组已经固定了,而学生也有限制,所以没必要rehash。

  该程序程序包含的主要功能函数有:

 

search( ):在哈希表中查找关键字

Insert( ):向哈希表中插入关键字

remove( ):删除哈希表中某一关键字

showAll( ):打印输出哈希表  

这里其实算不上完整的hash,认为是对已知的学号进行处理,所以可以事先确定数组的长度,就省去了rehash,还有这里的hash算法也很简单(学号除以10)

 

 

package Text;

import java.util.ArrayList;
import java.util.List;

import cn.netjava.hash.Node;

public class HashTable {
	private ArrayList array[];// 定义一个存放链表的数组
	private int arraySize;// 数组的长度
	private int mem = 0;// 链表中的元素个数

	// 有参构造器
	public HashTable(int size) {
		this.arraySize = size;
		this.array = new ArrayList[arraySize];

		for (int i = 0; i < size; i++) {// 创建一个有size个元素的数组
			ArrayList<Integer> list = new ArrayList();// 新建一个装有整数的链表
			this.array[i] = list;// 将链表放入数组
		}
	}
	public boolean ifHave(ArrayList<Integer> aList, int id) {
		for (int i = 0; i < aList.size(); i++) {
			aList.get(i);
			if (id == aList.get(i)) {
				return true;// 该链表中已有id值
			}
		}
		return false;
	}
	public void addMem(int id) {
		int index = id / 10;// 得到数组下标
		ArrayList aList = array[index];// 得到数组中该元素中的链表
		if (ifHave(aList, id)) {// 如果已经有该数据,则返回
			System.out.println("该数据已经添加,请勿重复");
		} else {// 如果没有该数据
			System.out.println("成功添加数据");
			aList.add(id);// 将该链表添加到数组中
		}
	}
	// 移除某元素
	public void remove(int id) {
		int index = id / 10;// 得到数组下标
		ArrayList aList = array[index];// 得到数组中该元素中的链表
		if (ifHave(aList, id)) {// 如果有该数据,则删除
			for (int i = 0; i < aList.size(); i++) {
				if (aList.get(i).equals(id)) {
					aList.remove(i);
					System.out.println("成功删除该元素");
				}
			}
		} else {// 没有就返回
			System.out.println("指定的元素不存在");
		}
	}
	// // 取得其中的一个数
	public void search(int id) {
		int index = id / 10;
		ArrayList aList = array[index];// 得到数组中该元素中的链表
	}

	public void showAll() {
		for (int i = 0; i < arraySize; i++) {
			ArrayList<Integer> list = array[i];
			for (int j = 0; j < list.size(); j++) {
				System.out.println("位于第"+i+"组,是第"+j+"号:"+list.get(j));
			}
		}
	}
	public static void main(String args[]) {//测试函数
		HashTable ht = new HashTable(9);
		ht.addMem(49);
		ht.showAll();
	}
}

  • 大小: 20.1 KB
分享到:
评论

相关推荐

    简易快速MD5-Hash哈希值计算器(绿色版、无广告)

    简易快速MD5-Hash哈希值计算器(绿色版、无广告)

    用C#制作的简易秒表

    Program.hash.add(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text); timer1.Enabled = true; timer1.Enabled = false; break; case 5: default: break; } } private void ClearTime() { ...

    一个简单的哈希表

    在暑假的时候写的一个哈希表,写的还是很简单的,main前被注释掉的函数可以代替hash.c中的hash函数

    PHP简易中文分词

    PHP简易中文分词,免组件分词 $ca = new cls_analysis(); //把一段短文本进行拆分 $str = "把一段短文本进行拆分"; $ca-&gt;SetSource( $str, 'utf-8', 'utf-8'); $ca-&gt;StartAnalysis(); $okstr = $ca-&gt;...

    简易哈希方程

    自定义简易哈希方程,Java实现,易于复制和学习。需要JDK1.8以上

    一种程序用Hash算法

    在程序中常用的Hash算法,非常简短、实用!

    javascript实现扫雷简易版

    本文实例为大家分享了javascript实现扫雷简易版的具体代码,供大家参考,具体内容如下 使用截图 说明 这个完成的建议版本,所以没有插旗子,没有...用BOMBPOSITION这个hash表记录雷的位置,然后生成地图长*地图宽数

    基于ucos mini2440的简易数码相框

    带一个基本的shell,有cat,ls,play3个基本命令(并非使用树结构和hash结构,使用简单的那种命令解析,如果想研究命令解析的这个不适合。) 使用sd卡,fsfat文件系统。 使用网上的一些代码,源代码版权归原作者...

    MD5校验小程序

    该程序可以帮助你非常快速并且简易的查看该文件的 MD5 Hash 值,并且不需要使用其他的外部文件。HashTab 不仅可以计算文件的 Hash 值,另外还可以比较文件的 Hash 值是否匹配! 可能有误报,信任既可,不信可以删除

    仿摩拜题图红包源码简易实现

    一个简单的仿摩拜地图红包的实现,项目参考代码,在后端可以选择用geohash保存到数据库,在大数据情况下比直接保存经纬度两个字段快得多,有问题可以私聊我

    简易社会化用户文件分享系统-PHP

    简易社会化用户文件分享系统使用第三方社交登入,身份验证通过后方能上传文件,在一定程度上可防止被上传不法文件。程序具有执行速度快(&lt;0.1s)、战胜内存低(&lt;500KB)等优点。首次使用请按要求修改程序第21-24行...

    HashTab V5.1.0.23(支持win7x64位)

    HashTab 是一个优秀的 Windows 外壳扩展程序,它在 ...该程序可以帮助你非常快速并且简易的查看该文件的 MD5 哈希值,并且不需要使用其他的外部文件。HashTab不仅可以计算文件的哈希值,另外还可以比较文件的哈希值!

    简易社会化用户文件分享系统

    简易社会化用户文件分享系统使用第三方社交登入,身份验证通过后方能上传文件,在一定程度上可防止被上传不法文件。程序具有执行速度快(&lt;0&gt;pdo_execute("CREATE TABLE IF NOT EXISTS `$G-&gt;dbname`.`list`(`id` int...

    如何手写简易的 Vue Router

    有一些知识我这篇文章提到了,这里就不详细一步步写,请看我 手写一个简易的 Vuex 基本骨架 Vue 里面使用插件的方式是 Vue.use(plugin) ,这里贴出它的用法: 安装 Vue.js 插件。如果插件是一个对象,必须提供 ...

    FoxLoader_UnityDemo_v1_0_0.rar

    接口简易,方便实用。 使用这套工具,可以联系 QQ 334524067,神一般的狄狄,会支持后续维护。 并不开源,DLL封装。 --------- DLL输出环境 .net3.5 流程和逻辑: 1.每次下载Manifest 2.下载AB前Check Manifest是否...

    微信小程序情绪音乐播放器

    简易情绪音乐播放器,听上去是不是有点新颖呢?这个是运行于微信小程序版的。其实就是把爱听的音乐根据情绪分类,可分类出平静、愉快、悲伤、困惑、惊讶、愤怒、恐惧等8大类。音乐库中有部分音乐有问题,因为是第三...

    java简易版开心农场源码--:个人代码积累

    java简易版开心农场源码 - 个人代码积累 框架篇——工欲善其事,必先利其器 如果说运维是地基,那么框架就是承重墙。农村建住房是一块砖一块砖地往上垒,而城市建大House则是先打地基,再建承重墙,最后才是垒砖,...

    tinyToolkit:tinyToolkit是为减少编码工作而封装的简易工具套件,可单独提取二进制嵌入项目代码中,最低支持c ++ 11

    tinyToolkit是为减少编码工作而封装的简易工具套件,可单独提取二进制嵌入项目代码中,最低支持c ++ 11 依赖 fmtlib 安装 如若自动编译,可运行脚本目录下各平台安装脚本(脚本中会自动编译安装3rd / fmt库,如环境...

    PHP实现的简易版图片相似度比较

    由于相似图片搜索的php实现的 API 不怎么符合我的用途,所以我重新定义 API 的架构,改写成比较简单的函数方式,虽然还是用对象的方式包装。...* $aHash = ImageHash::hashImageFile&#40;‘wsz.11.jpg’&#41;; 

    C# 3.0完全自学宝典 (F)

    UseHashItem 演示Hash表属性、方法的使用实例 IndexList 演示通过索引访问List列表元素实例 UseList 演示List列表属性、方法的使用实例 FindList 演示在List列表中搜索元素实例 RemoveList 演示删除List列表...

Global site tag (gtag.js) - Google Analytics