哈希表是结合数组跟链表的算法,可以说哈希表是一个装有链表的数组,他继承了数组易查找,链表易插入,删除的特点。
现假设有若干(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哈希值计算器(绿色版、无广告)
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简易中文分词,免组件分词 $ca = new cls_analysis(); //把一段短文本进行拆分 $str = "把一段短文本进行拆分"; $ca->SetSource( $str, 'utf-8', 'utf-8'); $ca->StartAnalysis(); $okstr = $ca->...
自定义简易哈希方程,Java实现,易于复制和学习。需要JDK1.8以上
在程序中常用的Hash算法,非常简短、实用!
本文实例为大家分享了javascript实现扫雷简易版的具体代码,供大家参考,具体内容如下 使用截图 说明 这个完成的建议版本,所以没有插旗子,没有...用BOMBPOSITION这个hash表记录雷的位置,然后生成地图长*地图宽数
带一个基本的shell,有cat,ls,play3个基本命令(并非使用树结构和hash结构,使用简单的那种命令解析,如果想研究命令解析的这个不适合。) 使用sd卡,fsfat文件系统。 使用网上的一些代码,源代码版权归原作者...
该程序可以帮助你非常快速并且简易的查看该文件的 MD5 Hash 值,并且不需要使用其他的外部文件。HashTab 不仅可以计算文件的 Hash 值,另外还可以比较文件的 Hash 值是否匹配! 可能有误报,信任既可,不信可以删除
一个简单的仿摩拜地图红包的实现,项目参考代码,在后端可以选择用geohash保存到数据库,在大数据情况下比直接保存经纬度两个字段快得多,有问题可以私聊我
简易社会化用户文件分享系统使用第三方社交登入,身份验证通过后方能上传文件,在一定程度上可防止被上传不法文件。程序具有执行速度快(<0.1s)、战胜内存低(<500KB)等优点。首次使用请按要求修改程序第21-24行...
HashTab 是一个优秀的 Windows 外壳扩展程序,它在 ...该程序可以帮助你非常快速并且简易的查看该文件的 MD5 哈希值,并且不需要使用其他的外部文件。HashTab不仅可以计算文件的哈希值,另外还可以比较文件的哈希值!
简易社会化用户文件分享系统使用第三方社交登入,身份验证通过后方能上传文件,在一定程度上可防止被上传不法文件。程序具有执行速度快(<0>pdo_execute("CREATE TABLE IF NOT EXISTS `$G->dbname`.`list`(`id` int...
有一些知识我这篇文章提到了,这里就不详细一步步写,请看我 手写一个简易的 Vuex 基本骨架 Vue 里面使用插件的方式是 Vue.use(plugin) ,这里贴出它的用法: 安装 Vue.js 插件。如果插件是一个对象,必须提供 ...
接口简易,方便实用。 使用这套工具,可以联系 QQ 334524067,神一般的狄狄,会支持后续维护。 并不开源,DLL封装。 --------- DLL输出环境 .net3.5 流程和逻辑: 1.每次下载Manifest 2.下载AB前Check Manifest是否...
简易情绪音乐播放器,听上去是不是有点新颖呢?这个是运行于微信小程序版的。其实就是把爱听的音乐根据情绪分类,可分类出平静、愉快、悲伤、困惑、惊讶、愤怒、恐惧等8大类。音乐库中有部分音乐有问题,因为是第三...
java简易版开心农场源码 - 个人代码积累 框架篇——工欲善其事,必先利其器 如果说运维是地基,那么框架就是承重墙。农村建住房是一块砖一块砖地往上垒,而城市建大House则是先打地基,再建承重墙,最后才是垒砖,...
tinyToolkit是为减少编码工作而封装的简易工具套件,可单独提取二进制嵌入项目代码中,最低支持c ++ 11 依赖 fmtlib 安装 如若自动编译,可运行脚本目录下各平台安装脚本(脚本中会自动编译安装3rd / fmt库,如环境...
由于相似图片搜索的php实现的 API 不怎么符合我的用途,所以我重新定义 API 的架构,改写成比较简单的函数方式,虽然还是用对象的方式包装。...* $aHash = ImageHash::hashImageFile(‘wsz.11.jpg’);
UseHashItem 演示Hash表属性、方法的使用实例 IndexList 演示通过索引访问List列表元素实例 UseList 演示List列表属性、方法的使用实例 FindList 演示在List列表中搜索元素实例 RemoveList 演示删除List列表...