「java创建哈希表」java中哈希表
本篇文章给大家谈谈java创建哈希表,以及java中哈希表对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、JAVA创建一个哈希表储存数据并输出,要完整代码
- 2、java中,HashMap的创建流程是什么?
- 3、数据结构(java版)哈希表的设计
- 4、用java编写哈希表,输入一组数据,创建一个哈希表,然后进行元素的查询、删除
JAVA创建一个哈希表储存数据并输出,要完整代码
我就不写了,给个提示吧:
建一个类,名字就叫员工,它有三个属性,分别是你要的三个数据,名字、工龄、工号。然后,每次put的时候这样:put('1234',员工1);以员工工号为key,类员工为value
java中,HashMap的创建流程是什么?
创建流程,指的是:
MapString, String mp = new HashMapString, String();
吗?
就是创建一个HashMap对象,其中键的类型为String,值的类型也为String;
当然,键和值的类型也可以是其他的。例如,创建了一个类叫做Student,我们现在还有每一个学生的学号。那么就可以建立一个MapString, Student 这样的HashMap。通过这样的方式,我们就可以利用学号来找到具体对应的学生。
数据结构(java版)哈希表的设计
1.什么是哈希表?
哈希表是一种数据结构,它提供了快速的插入操作和查找操作。其基于数组来实现。
2.哈希化
1)直接将关键字作为索引。
2)将单词转换成索引。
1将字母转换成ASCII码,然后进行相加
2幂的连乘
3压缩可选值
3.压缩后仍然可能出现的问题。
冲突:不能保证每个单词都映射到数组的空白单元。
解决办法:
1开放地址法
2链地址法
/**
* 员工信息类
* @author Administrator
*
*/
public class Info {
private String key;
private String name;
public Info(String key, String name) {
this.key = key;
this.name = name;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
import java.math.BigInteger;
public class HashTable {
private Info[] arr;
/**
* 默认的构造方法
*/
public HashTable() {
arr = new Info[100];
}
/**
* 指定数组初始化大小
*/
public HashTable(int maxSize) {
arr = new Info[maxSize];
}
/**
* 插入数据
*/
public void insert(Info info) {
arr[hashCode(info.getKey())] = info;
}
/**
* 查找数据
*/
public Info find(String key) {
return arr[hashCode(key)];
}
public int hashCode(String key) {
// int hashVal = 0;
// for(int i = key.length() - 1; i = 0; i--) {
// int letter = key.charAt(i) - 96;
// hashVal += letter;
// }
// return hashVal;
BigInteger hashVal = new BigInteger("0");
BigInteger pow27 = new BigInteger("1");
for(int i = key.length() - 1; i = 0; i--) {
int letter = key.charAt(i) - 96;
BigInteger letterB = new BigInteger(String.valueOf(letter));
hashVal = hashVal.add(letterB.multiply(pow27));
pow27 = pow27.multiply(new BigInteger(String.valueOf(27)));
}
return hashVal.mod(new BigInteger(String.valueOf(arr.length))).intValue();
}
}
public class TestHashTable {
public static void main(String[] args) {
HashTable ht = new HashTable();
ht.insert(new Info("a","张三"));
ht.insert(new Info("ct","李四"));
ht.insert(new Info("wangwu","王五"));
System.out.println(ht.find("a").getName());
System.out.println(ht.find("ct").getName());
}
}
用java编写哈希表,输入一组数据,创建一个哈希表,然后进行元素的查询、删除
#包括中
#包括中
#包括
/ /#包括
#定义50 HASH_LEN / /哈希表的长度
#定义男47
#定义NAME_NO 30 / /数字名称
typedef结构名称
{
的char * PY; / /名称的字母
K; / /拼音对应的整数
}名称;
名称名单[HASH_LEN];
typedef的struct hterm的/ /哈希表
{,
炭* PY / /名称的字母
K; / /拼音对应的整数
诠释SI / /查找长度
} HASH; BR / HASH HashList的[HASH_LEN];
/ * -----------------------名称(结构数组)来初始化 - -------------------------------- * /
的无效InitNameList()
{
名单[0]。 PY =的“chenghongxiu”;
名单[1]。 PY =“元昊”;
名单[2]。 PY =“襄阳”;
名单[3]。 PY =的“zhanghen”;
名单[4]。 PY =的“chenghongxiu”;
名单[5]。 PY =“杨小凯”;的
名单[6]。 PY =“六朋”;
名单[7]。 PY =的“shenyonghai”;
名单[8]。 PY =“chengdaoquan”名单[9]。 PY =的“ludaoqing”;
名单[10]。 PY =的“gongyunxiang”;
名单[11]。 PY =的“sunzhenxing”;
名单[12]。 PY =的“sunrongfei”;
名单[13]。 PY =的“sunminglong”;
名单[14]。 PY =“张皓”;
名单[15]。 PY =“田苗”;
名单[16]。 PY =的“yaojianzhong”;
名单[17]。 PY =的“yaojianqing”;
名单[18]。 PY =的“yaojianhua”;
名单[19]。 PY =的“yaohaifeng”;
名单[20]。 PY =的“chengyanhao”;
名单[21]。 PY =的“yaoqiufeng”;
名单[22]。 PY =的“qianpengcheng”;
名单[23]。 PY =的“yaohaifeng”;
名单[24]。 PY =的“bianyan”;
名单[25]。 PY =“linglei”;
名单[26]。 PY =的“fuzhonghui”;
名单[27]。 PY =的“huanhaiyan”;
名单[28]。 PY =的“liudianqin”;
名单[29]。 PY =的“wangbinnian”
字符* F;
INT R,S0;
(INT I = 0; NAME_NO; + +)
{
S0 = 0;
F =名单[I]。 PY
相关(r = 0; *(F + R)= NULL与r + +)/ /方法:每个字符的字符串对应的ASCII码的总和,所得到的整数作为哈希表的关键字
S0 =(F + R)+ S0;
名单[I]。 K = S0;
}
}
/ * -----------------------建立哈希表--------------------------------- * /
的无效CreateHashList()
{(INT I = 0; NAME_NO; + +)
{
HashList [I]。 PY =“”;
HashList [I]。 K = 0;
HashList [I]。 SI = 0;
}
(I = 0; NAME_NO + +)
{
总和= 0;
ADR =(名单[I] K)%M / /哈希函数
- = ADR;
(HashList [ADR] SI == 0)/ /如果没有冲突
{ HashList [ADR]。 K =的名单[I]。 K;,
HashList [ADR]。 PY =的名单[I]。 PY;,
HashList [ADR]。 SI = 1;
} 其他/ /冲突
{
{
D =(D +((名单[I] K))%10 + 1)%M / /伪哈希总和=总和+1 / /发现号加1
}(HashList [D] K!= 0);
BR / HashList的研究[D]。 K =的名单[I]。 K;
HashList的研究[D]。 PY =的名单[I]。 PY;
HashList的研究[D]。 SI =总和+1;
}
}
}
/ * ------------------- ------------------查找------------------------------- ----- * /
的无效FindList()
{
的printf(“\ n \ n已请输入名字的拼音:”); / /输入名称
字符名[20] = {0};
scanf函数(“%”,名称)
INT S0 = 0;
(R = 0; 20,R + +)/ /找到对应的字母的名称一个整数(关键字)
S0 + =名称[R]。
总和= 1; BR / ADR = S0%M,/ /使用哈希函数
= ADR;
如果判断(HashList [ADR]。K == S0)/ /三例
的printf(“\ N名:%s关键字:%d个查找长度:1”,HashList [J]。PY,S0);
否则,如果(HashList [ADR]。K == 0)
的printf(“有没有这样的记录!”); 其他
{
G = 0;
{
D =(D + S0%10 +1)%M; / /伪散货的列
总和=总和+1;
(HashList的研究[D]。K == 0)
{
的printf(“无记录!”); br / G = 1;
}
(HashList并[d],K = S0)
{
的printf(“\ N名:%s关键字:%d个查找长度为:%d的”HashList [J]。PY,S0,总和);
G = 1;
}
},(G == 0);
}
}
/ * -------------------- ------------展览哈萨克斯坦希腊表---------------------------- * /
无效显示()
{
的printf(“\ n \ n已地址\吨关键字\ T \ T查找长度\ TH(键)\ T \吨拼音\ N”); / /显示格式 BR p(INT I = 0; 15; + +)
{
的printf(“%d的”,I);
的printf(“\吨%D“HashList [I] K);
的printf(”\ T \ T%D“,HashList [I] SI);
的printf(”\ T \ T%D“ (HashList [I] K)%M);
的printf(“\%”,HashList的[]。PY);
的printf(“\ N”);
}
的printf(“按任意键继续显示... \ N”); / /由于数据较多,所以分屏显示(Win9x/DOS仍然可以看到所有的数据)
用getchar();
(I = 15; 30; i + +)
{
的printf(“%d”处,I);
printf的(“\ T%D”,HashList [I],K);
的printf(“\ T \ T%D”,HashList [I] SI);
的printf(“\ T \ T%D“(HashList [I] K)%M);
的printf(”\%“,HashList的[I]。PY);
的printf(”\ N“)
}
的printf(“按任意键继续呈现... \ N”);
的getchar的();
(I = 30; I 40 +)
{
的printf(“%d的”,我);
的printf(“\吨为%d”,HashList [I],K); /的printf(“\ T \ T%D”,HashList [I] SI);
的printf(“\ T \ T%D”(HashList [I] K)%M); /的printf(“\%”,HashList [I] PY);
的printf(“\”);
}
的printf(“按任意键继续呈现... \ N“);
的getchar的();
(I = 40; 50; + +)
{
的printf(”为%d“,I);
的printf(”\吨为%d“,HashList [I] K)
的printf(”\ T \ T%D“,HashList [I] SI) ;
的printf(“\吨\ T为%d”,(HashList [I],K)%M);
的printf(“\%”,HashList的[]。PY); BR /的printf(“\ N”);
}
浮法平均= 0;
(= 0; NAME_NO; + +)BR /平均+ = HashList [I]。 SI;
/ = NAME_NO;
的printf(“\ N \ N平均查找长度:ASL(%D)=%f \ N \ N”,NAME_NO平均);
}
/ * --------------------------------主要功能------ ---------------------- * /
无效的主要()
{
/ * :: SetConsoleTitle(“哈希表操作“)/ / Windows API函数,设置控制台窗口标题
手柄HCON = :: GetStdHandle(STD_OUTPUT_HANDLE); / /得到标准输出设备处理
:: SetConsoleTextAttribute(HCON,10 | 0 )/ /设置文本颜色
* /
的printf(“\ N ------------------------哈希表的创建查找----------------------“);
InitNameList();
CreateHashList();
(1)
{
的printf(“\ N \ N”);
的printf(“1。显示哈希表\”);
printf(“请2查找\ N“);
的printf(”3。退出\ n“);
错误:
字符CH1 =的getchar的();
(CH1 = '1')
显示();
其他(CH1 = '2')
FindList();
其他(CH1 = '3')返回;
其他
{
的printf(“\ n请输入正确的选择!”);
转到犯错;
}
} }
关于java创建哈希表和java中哈希表的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-25,除非注明,否则均为
原创文章,转载请注明出处。