数据结构--哈希表(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)相关推荐

  1. java hashtable排序_java中哈希表中有迭代器模式的实现,可以认为其是顺序表吗?...

    先上答案:HashTable (哈希表)不是顺序表. 分析如下: 要搞清楚这个问题需要明确两个问题: 1. 什么是顺序表 2. 哈希表的数据结构 先说什么是顺序表.WIKI的解释是:顺序表是在计算机内 ...

  2. 数据结构算法之哈希表

    哈希表也称作散列表,是介于链表和二叉树之间的一种结构体.因为这二者之间各有优缺点,链表的插入和删除操作可以在O(1)内实现,很方便,但是查询操作很麻烦,二叉树的数据排序严格有序,但是需要建立在大量的指 ...

  3. 数据结构实验:哈希表

    数据结构实验:哈希表 题目描述 在n个数中,找出出现次数最多那个数字,并且输出出现的次数.如果有多个结果,输出数字最小的那一个. 输入 单组数据,第一行数字n(1<=n<=100000). ...

  4. 数据结构学习,哈希表(链地址)

    各位小伙伴,新年快乐. 哈希表,本质上是数组,而链地址就是存放了链表的数组. 借用哈希函数对某个数进行适当运算求得该数的哈希值,在根据这个哈希值对哈希表进行查找插入删除操作. 假设这是一个哈希表H,容 ...

  5. java是纯_让你真正了解Java(纯干货)

    "你学习一门技术的最佳时机是三年前,其次是现在."这句话对于哪一种行业都很适用,如果你已经学习过Java,那么恭喜你你很有先见之明,如果你并不了解Java,这篇文章带你快速掌握Ja ...

  6. j - 数据结构实验:哈希表_一看就懂的数据结构基础「哈希表」

    哈希表 哈希表(Hash table),是存储键值(Key Value)对数据的一种数据结构. 例如,我们可以将人的名字作为键,性别作为值来存储.通过把键映射到表中的一个位置来访问数据,以提高查找速度 ...

  7. 学习数据结构笔记(8) ---[哈希表(Hash table)]

    B站学习传送门–>尚硅谷Java数据结构与java算法(Java数据结构与算法) 一般在java程序访问数据库时都会安排从内存的缓存层中取数据;之前的做法是自己写个哈希表,实现对数据的缓存. 哈 ...

  8. python hash表_python数据结构与算法——哈希表

    哈希表 学习笔记 参考翻译自:<复杂性思考> 及对应的online版本:http://greenteapress.com/complexity/html/thinkcomplexity00 ...

  9. 数据结构学习笔记 哈希表(一) 哈希表基础与哈希函数

    ------HR:The first question is what you do if you have a conflict with your manager ? ------You:Hash ...

最新文章

  1. 云计算推进企业管理深化,私有云将会深入企业
  2. RT-Thread与智能车比赛
  3. python常用命令汇总-酷帅吊炸天的 Pandas 常用操作命令汇总
  4. 品牌价值越发重要的时代,谁才是服务行业标杆?
  5. 每次digital painting 之后,都可以把作品放到这里,比较好看,也和nft相关度比较大
  6. 在Windows 7中禁用或修改Aero Peek的“延迟时间”
  7. LeetCode 739. 每日温度(单调栈)
  8. 罗永浩宣布要做带货一哥后,合作单子如雪花般飞来
  9. Java web 中的 三层架构
  10. int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void));
  11. 如何用c 语言编写贪吃蛇,刚学C语言,想写一个贪吃蛇的代码
  12. 重庆邮电大学c语言实验报告,重庆邮电大学c语言上机实验期末实验报告.doc
  13. 淘宝客工具箱源码,一键转链,淘口令解析 淘宝客中间页生成
  14. Intellij IDEA--配色方案/主题/风格/样式--自定义/配置
  15. Luogu 1894 [USACO4.2]完美的牛栏The Perfect Stall
  16. 芭蕉树上第二十二根芭蕉-- QT中一些报错问题
  17. win10启动项_win10系统开机启动项的设置教程
  18. android 音乐播放器关于歌词的处理
  19. 中国科学院微生物研究所微生物资源与大数据中心招聘启事
  20. 查看网络连接的netstat命令

热门文章

  1. 在Servlet中实现页面转发
  2. 1147 Heaps (30 分)【难度: 一般 / 知识点: 堆 模拟 】
  3. 【PAT乙级】1001 害死人不偿命的(3n+1)猜想 (15 分)
  4. 轻松搞懂sscanf和sprintf
  5. jQuery操作元素属性
  6. lua 调用文件中的函数调用_四、C++获得Lua的变量和Table的值
  7. 【数据结构-树】3.详解二叉排序树(理论+代码)
  8. 一款神仙接私活儿软件,吊到不行!
  9. 超详细百家大厂面试资料,免费送!
  10. springboot 开发入门,及问题汇总