java hashtable 数据结构_数据结构--哈希表(Java)
数据结构--哈希表(Java)
介绍
哈希表 底层是 数组加链表 或者是 数组加二叉树 ,一个数组里面有多个链表,通过散列函数来提高效率
代码
package cn.guizimo.hashtab;
import java.util.Scanner;
/**
* @author guizimo
* @date 2020/7/23 10:29 下午
*/
public class HashTabDemo {
public static void main(String[] args) {
HashTab hashTab = new HashTab(7);
String key = "";
Scanner scanner = new Scanner(System.in);
while (true){
System.out.println("add:添加");
System.out.println("list:显示");
System.out.println("find:显示");
System.out.println("exit:退出");
key = scanner.next();
switch (key){
case "add":
System.out.println("输入id");
int id = scanner.nextInt();
System.out.println("输入名字");
String name = scanner.next();
Emp emp = new Emp(id, name);
hashTab.add(emp);
break;
case "list":
hashTab.list();
break;
case "find":
System.out.println("请输入id");
id = scanner.nextInt();
hashTab.find(id);
break;
case "exit":
scanner.close();
System.exit(0);
default:
break;
}
}
}
}
class Emp{
public int id;
public String name;
public Emp next;
public Emp(int id, String name) {
super();
this.id = id;
this.name = name;
}
}
//哈希表
class HashTab{
private EmpLinkedList[] empLinkedListArray;
private int size;
//构造器
public HashTab(int size){
this.size = size;
empLinkedListArray = new EmpLinkedList[size];
for (int i = 0; i < size; i++) {
empLinkedListArray[i] = new EmpLinkedList();
}
}
//添加
public void add(Emp emp){
int empLinkedListNo = hashFun(emp.id);
empLinkedListArray[empLinkedListNo].add(emp);
}
public void find(int id){
int empLinkedListNo = hashFun(id);
Emp emp = empLinkedListArray[empLinkedListNo].find(id);
if (emp != null){
System.out.printf("在第%d条链表中找到id=%d\n",(empLinkedListNo+1),id);
}else {
System.out.println("没有找到");
}
}
//遍历
public void list(){
for (int i = 0; i < size; i++) {
empLinkedListArray[i].list(i);
}
}
//散列(取模)
public int hashFun(int id){
return id % size;
}
}
class EmpLinkedList{
private Emp head;
public void add(Emp emp){
if(head == null){
head = emp;
return;
}
Emp curEmp = head;
while (true){
if(curEmp.next == null){
break;
}
curEmp = curEmp.next;
}
curEmp.next = emp;
}
public void list(int no){
if(head == null){
System.out.println("第"+(no+1)+"条链表为空");
return;
}
System.out.print("第"+(no+1)+"条链表信息");
Emp curemp = head;
while (true){
System.out.printf("id=%d,name=%s\t",curemp.id,curemp.name);
if(curemp.next == null){
break;
}
curemp = curemp.next;
}
System.out.println();
}
public Emp find(int id){
if(head == null){
System.out.println("链表为空");
return null;
}
Emp curEmp = head;
while (true){
if(curEmp.id == id){
break;
}
if(curEmp.next == null){
curEmp = null;
break;
}
curEmp = curEmp.next;
}
return curEmp;
}
}
原文链接:https://www.cnblogs.com/guizimo/p/13369611.html
java hashtable 数据结构_数据结构--哈希表(Java)相关推荐
- java hashtable排序_java中哈希表中有迭代器模式的实现,可以认为其是顺序表吗?...
先上答案:HashTable (哈希表)不是顺序表. 分析如下: 要搞清楚这个问题需要明确两个问题: 1. 什么是顺序表 2. 哈希表的数据结构 先说什么是顺序表.WIKI的解释是:顺序表是在计算机内 ...
- 数据结构算法之哈希表
哈希表也称作散列表,是介于链表和二叉树之间的一种结构体.因为这二者之间各有优缺点,链表的插入和删除操作可以在O(1)内实现,很方便,但是查询操作很麻烦,二叉树的数据排序严格有序,但是需要建立在大量的指 ...
- 数据结构实验:哈希表
数据结构实验:哈希表 题目描述 在n个数中,找出出现次数最多那个数字,并且输出出现的次数.如果有多个结果,输出数字最小的那一个. 输入 单组数据,第一行数字n(1<=n<=100000). ...
- 数据结构学习,哈希表(链地址)
各位小伙伴,新年快乐. 哈希表,本质上是数组,而链地址就是存放了链表的数组. 借用哈希函数对某个数进行适当运算求得该数的哈希值,在根据这个哈希值对哈希表进行查找插入删除操作. 假设这是一个哈希表H,容 ...
- java是纯_让你真正了解Java(纯干货)
"你学习一门技术的最佳时机是三年前,其次是现在."这句话对于哪一种行业都很适用,如果你已经学习过Java,那么恭喜你你很有先见之明,如果你并不了解Java,这篇文章带你快速掌握Ja ...
- j - 数据结构实验:哈希表_一看就懂的数据结构基础「哈希表」
哈希表 哈希表(Hash table),是存储键值(Key Value)对数据的一种数据结构. 例如,我们可以将人的名字作为键,性别作为值来存储.通过把键映射到表中的一个位置来访问数据,以提高查找速度 ...
- 学习数据结构笔记(8) ---[哈希表(Hash table)]
B站学习传送门–>尚硅谷Java数据结构与java算法(Java数据结构与算法) 一般在java程序访问数据库时都会安排从内存的缓存层中取数据;之前的做法是自己写个哈希表,实现对数据的缓存. 哈 ...
- python hash表_python数据结构与算法——哈希表
哈希表 学习笔记 参考翻译自:<复杂性思考> 及对应的online版本:http://greenteapress.com/complexity/html/thinkcomplexity00 ...
- 数据结构学习笔记 哈希表(一) 哈希表基础与哈希函数
------HR:The first question is what you do if you have a conflict with your manager ? ------You:Hash ...
最新文章
- 云计算推进企业管理深化,私有云将会深入企业
- RT-Thread与智能车比赛
- python常用命令汇总-酷帅吊炸天的 Pandas 常用操作命令汇总
- 品牌价值越发重要的时代,谁才是服务行业标杆?
- 每次digital painting 之后,都可以把作品放到这里,比较好看,也和nft相关度比较大
- 在Windows 7中禁用或修改Aero Peek的“延迟时间”
- LeetCode 739. 每日温度(单调栈)
- 罗永浩宣布要做带货一哥后,合作单子如雪花般飞来
- Java web 中的 三层架构
- int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void));
- 如何用c 语言编写贪吃蛇,刚学C语言,想写一个贪吃蛇的代码
- 重庆邮电大学c语言实验报告,重庆邮电大学c语言上机实验期末实验报告.doc
- 淘宝客工具箱源码,一键转链,淘口令解析 淘宝客中间页生成
- Intellij IDEA--配色方案/主题/风格/样式--自定义/配置
- Luogu 1894 [USACO4.2]完美的牛栏The Perfect Stall
- 芭蕉树上第二十二根芭蕉-- QT中一些报错问题
- win10启动项_win10系统开机启动项的设置教程
- android 音乐播放器关于歌词的处理
- 中国科学院微生物研究所微生物资源与大数据中心招聘启事
- 查看网络连接的netstat命令
热门文章
- 在Servlet中实现页面转发
- 1147 Heaps (30 分)【难度: 一般 / 知识点: 堆 模拟 】
- 【PAT乙级】1001 害死人不偿命的(3n+1)猜想 (15 分)
- 轻松搞懂sscanf和sprintf
- jQuery操作元素属性
- lua 调用文件中的函数调用_四、C++获得Lua的变量和Table的值
- 【数据结构-树】3.详解二叉排序树(理论+代码)
- 一款神仙接私活儿软件,吊到不行!
- 超详细百家大厂面试资料,免费送!
- springboot 开发入门,及问题汇总