哈希表实现

package com.atguigu.hashtab;import java.nio.file.NotLinkException;
import java.sql.SQLOutput;
import java.util.Scanner;/*** @创建人 wdl* @创建时间 2021/3/24* @描述*/
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("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.findEmpById(id);break;case "exit":scanner.close();System.exit(0);break;default:break;}}}}//创建HashTab管理多条链表
class HashTab{private EmpLinkedList[] empLinkedListArray;private int size;//表示有多少条链表//构造器public HashTab(int size){this.size=size;//初始化empLinkedListArrayempLinkedListArray=new EmpLinkedList[size];//留一个坑,这时不要忘了分别初始化每一条链表for (int i = 0; i < size; i++) {empLinkedListArray[i]=new EmpLinkedList();}}//添加雇员public void add(Emp emp){//根据员工的id,得到该员工应当添加到哪条链表int empLinkedListNo=hashFun(emp.id);//将emp添加到对应的链表中empLinkedListArray[empLinkedListNo].add(emp);}//遍历所有的链表,遍历hashtabpublic void list(){for (int i = 0; i < size; i++) {empLinkedListArray[i].list(i);}}//根据输入的id,查找雇员public void findEmpById(int id){//使用散列函数确定到哪条链表查找int empLinkedListNo = hashFun(id);Emp emp = empLinkedListArray[empLinkedListNo].findEmpById(id);if(emp!=null){//找到System.out.println("在第"+(empLinkedListNo+1)+"条链表中找到雇员id="+id);}else {System.out.println("在哈希表中,没有找到该雇员");}}//编写散列函数,使用一个简单的取模发public int hashFun(int id){return id%size;}}//表示一个雇员
class Emp{public int id;public String name;public Emp next;//next默认为nullpublic Emp(int id, String name) {super();this.id = id;this.name = name;}}//创建一个EmpLinkedList,表示链表
class EmpLinkedList{//头指针,指向第一个Emp,因此我们这个链表的head是直接指向第一个Empprivate Emp head;//默认null//添加雇员到链表//说明//1.假定,当添加雇员是,id是自增长,即id的分配总是从小到大//因此我们将雇员直接加入到本链表的最后即可public void add(Emp emp){//如果是添加第一个雇员if(head==null){head=emp;return;}//如果不是第一个雇员,则使用一个辅助的指针,帮助我们定位到最后Emp curEmp=head;while(true){if(curEmp.name==null){//说明到链表的最后break;}curEmp=curEmp.next;//后移}//退出时直接将emp加入链表curEmp.next=emp;}//遍历链表的雇员public void list(int no){if(head==null){//说明链表为空System.out.println("第"+(no+1)+"条链表为空");return;}System.out.println("第"+(no+1)+"条链表的信息为");Emp curEmp=head;//辅助指针while (true){System.out.println("=>id="+curEmp.id+" name="+curEmp.name+"\t");if (curEmp.next== null){//说明curEmp已经是最后节点break;}curEmp=curEmp.next;//后移,遍历}System.out.println();}//根据id查找雇员//如果找都就返回Emp,如果没有找到,就返回nullpublic Emp findEmpById(int id){//判断链表是否为空if(head==null){System.out.println("链表为空");return null;}//辅助指针Emp curEmp=head;while(true){if(curEmp.id==id){//找到break;//这时curEmp就指向要查找的雇员}//退出if(curEmp.next==null){//说明遍历当前链表没有找到该雇员curEmp=null;break;}curEmp=curEmp.next;//}return curEmp;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js深度复制一个对象使用JSON.stringify是最好的办法吗

转载自 js深度复制一个对象使用JSON.stringify是最好的办法吗 深度复制一个对象&#xff0c;看到很多种方法&#xff0c;最简单的是&#xff1a; var newObject JSON.parse(JSON.stringify(oldObject)); 这样写有什么弊端吗&#xff1f; http://stackoverflow.com/quest…

[Java]对double变量进行四舍五入,并保留小数点后位数

[Java]对double变量进行四舍五入&#xff0c;并保留小数点后位数 - 雾霾王者 - 博客园 [Java]对double变量进行四舍五入&#xff0c;并保留小数点后位数 1.功能 将double类型变量进行四舍五入&#xff0c;并保留小数点后位数 2.代码 import java.math.BigDecimal; import ja…

尊贵豪礼:微软2017最有价值专家MVP奖套件开箱图集

IT之家编者按&#xff1a;台湾省某科技网站站长获得了微软2017年度最有价值专家&#xff08;Most Valuable Professional&#xff0c;MVP&#xff09;奖&#xff0c;得奖的领域则是 Windows and Devices for IT。这位站长于是就展示了这份MVP的礼包开箱&#xff0c;从照片上看&…

echart vue 图表大小_vue之将echart封装为组件

最近的新项目里&#xff0c;有大量数据图表类的需求&#xff0c;为了增强代码的复用性&#xff0c;减少冗余&#xff0c;我开始思考如何将echart封装为组件调用。本文将会以雷达图为案例&#xff0c;一步步讲解在vue项目中如何使用echart&#xff0c;如何将其封装为能重复调用的…

ssh(Spring+Spring mvc+hibernate)——Dept.hbm.xml

<?xml version"1.0" encoding"utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file au…

个性化配置你的SQL Server on Linux

问题引入 这天老鸟满面春风找到菜鸟&#xff1a;“鸟儿啊&#xff0c;看你最近研究SQL Server On Linux如鱼得水&#xff0c;干得不错啊。不过呢&#xff0c;这是一个张扬个性的年代&#xff0c;要创新&#xff0c;要与众不同&#xff0c;那你怎么在Linux平台对SQL Server做个性…

idea查看读取的那个nacos配置和yaml配置 naocos 日志

logging.level.com.alibaba.cloud.nacos.client.NacosPropertySourceBuilderdebug

二叉树的前中后序查找+思路分析

思路分析 代码实现 package com.atguigu.tree;/*** 创建人 wdl* 创建时间 2021/3/24* 描述*/ public class BinaryTreeDemo {public static void main(String[] args) {//先需要创建一颗二叉树BinaryTree binaryTree new BinaryTree();//创建需要的节点HeroNode root new He…

JavaScript Function.arguments 属性详解

转载自 JavaScript Function.arguments 属性详解 arguments属性是正在执行的函数的内置属性&#xff0c;返回该函数的arguments对象。arguments对象包含了调用该函数时所传入的实际参数信息(参数个数、参数值等)。 该属性属于Function对象&#xff0c;所有主流浏览器均支持…

sh(Spring+Spring mvc+hibernate)——BaseDao.java

/** * Title: BaseDao.java * Package org.dao * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-11-17 上午8:17:28 * version V1.0 */ package org.dao;import java.io.Serializable;/*** * * 项目名称&#xff…

spark sql uv_使用Spark Streaming SQL进行PV/UV统计

作者&#xff1a;关文选&#xff0c;花名云魄&#xff0c;阿里云E-MapReduce 高级开发工程师&#xff0c;专注于流式计算&#xff0c;Spark Contributor1.背景介绍PV/UV统计是流式分析一个常见的场景。通过PV可以对访问的网站做流量或热点分析&#xff0c;例如广告主可以通过PV…

asp.net core mvc实现伪静态功能

在大型网站系统中&#xff0c;为了提高系统访问性能&#xff0c;往往会把一些不经常变得内容发布成静态页&#xff0c;比如商城的产品详情页&#xff0c;新闻详情页&#xff0c;这些信息一旦发布后&#xff0c;变化的频率不会很高&#xff0c;如果还采用动态输出的方式进行处理…

二叉树删除节点+思路分析

思路分析 代码实现 ![在这里插入代码片](https://img-blog.csdnimg.cn/20210325193201194.png?x-oss-processimage/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzgzNjYw,size_16,color_FFFFFF,t_70)

sql mysql 命令计算年龄 格式化日期

命令计算年龄 <if test"query.startAge ! null" >and <![CDATA[ timestampdiff(year, substring(u.idno, 7, 8), now()) > startAge ]]></if>select timestampdiff(year, substring(110101199309228395, 7, 8), now());SELECT DATE_FORMAT(N…

比较正宗的验证邮箱的正则表达式js代码详解

转载自 比较正宗的验证邮箱的正则表达式js代码详解 邮箱正则最正宗的一条正则语句是^[a-z0-9]([._\\-]*[a-z0-9])*([a-z0-9][-a-z0-9]*[a-z0-9].){1,63}[a-z0-9]$ 下面我们来讲解一下 fuchangxi的正则&#xff1a; /^([a-zA-Z0-9_-])([a-zA-Z0-9_-])(.[a-zA-Z0-9_-])/ 开…

ddm模型公式_简单判断目前行情——从股利贴现模型切入

本文目录&#xff1a;1.介绍股利贴现模型&#xff1b;2.以贵州茅台为例根据现有情况估计模型内部各参数&#xff1b;3.得出结论&#xff1b;一、股利贴现模型&#xff08;DDM&#xff09;我们知道给一项资产定价最朴素的想法是将它未来产生的所有现金流以一定的贴现率贴现至当前…

sh(Spring+Spring mvc+hibernate)——IDeptDao.java

/** * Title: IDeptDao.java * Package org.dao * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-11-21 上午9:42:32 * version V1.0 */ package org.dao;import java.util.List;import org.entity.Dept;/** * * …

解决Html5用canvas绘制不出来图片的问题

转载自 解决Html5用canvas绘制不出来图片的问题 如果使用html5的ctx.drawImage(img,0,0);绘制不出来&#xff0c; 就改为&#xff1a;img.onload function(){ctx.drawImage(img,0,0);} 只有img 加载完了&#xff0c;你画它才有意义。

Hutool 日期时间工具-DateUtil使用

java中获取当月1号零时零分的时间 /*** 获得当月1号零时零分零秒* return*/ public Date initDateByMonth(){Calendar calendar Calendar.getInstance();calendar.setTime(new Date());calendar.set(Calendar.DAY_OF_MONTH, 1);calendar.set(Calendar.HOUR_OF_DAY, 0);calenda…

顺序存储二叉树

package com.atguigu.tree;/*** 创建人 wdl* 创建时间 2021/3/25* 描述*/ public class ArrBinaryTreeDemo {public static void main(String[] args) {int[] arr{1,2,3,4,5,6,7};//创建一个ArrBinaryTreeArrBinaryTree arrBinaryTree new ArrBinaryTree(arr);arrBinaryTree.p…