package day05;

import java.sql.SQLOutput;
import java.util.Scanner; /**
* 哈希表代码实现
*/
public class HashTab { public static void main(String[] args) {
System.out.println("-----------功能-----------");
System.out.println("查询所有员工:findAll");
System.out.println("查询指定ID员工:findOne");
System.out.println("添加员工:add");
System.out.println("删除员工:delete");
System.out.println("清空员工:clear");
System.out.println("--------------------------");
while (true) {
System.out.print("请输入需要执行功能:");
String handle = new Scanner(System.in).next();
if (handle.equals("add")) {
System.out.print("请输入用户ID:");
int id = new Scanner(System.in).nextInt();
System.out.print("请输入用户姓名:");
String name = new Scanner(System.in).next();
Emp emp = new Emp(id, name);
add(emp);
} else if (handle.equals("findAll")) {
findAll();
} else if (handle.equals("findOne")) {
System.out.print("请输入要查询员工ID:");
int id = new Scanner(System.in).nextInt();
findOne(id);
} else if (handle.equals("delete")) {
System.out.print("请输入要删除员工ID:");
int id = new Scanner(System.in).nextInt();
delete(id);
} else if (handle.equals("clear")) {
System.out.println("正在清理所有员工信息...");
clearEmp();
} else if (handle.equals("exit")) {
System.out.println("退出功能...");
break;
}
}
} public static final int SIZE = 7; public static EmployeeList[] employeeLists = new EmployeeList[SIZE]; static {
for (int i = 0; i < employeeLists.length; i++) {
employeeLists[i] = new EmployeeList();
}
} private static void delete(int id) {
int hashIndex = hashIndex(id);
EmployeeList employeeList = employeeLists[hashIndex];
employeeList.delete(id);
} private static void findOne(int id) {
int hashIndex = hashIndex(id);
EmployeeList employeeList = employeeLists[hashIndex];
employeeList.findOne(id);
} public static void findAll() {
for (int i = 0; i < employeeLists.length; i++) {
System.out.print("第" + (i + 1) + "条链表:");
employeeLists[i].findAll();
System.out.println();
}
} public static void add(Emp emp) {
if (emp == null) {
throw new IllegalArgumentException("添加对象不能为空");
}
int hashIndex = hashIndex(emp.getId());
EmployeeList employeeList = employeeLists[hashIndex];
employeeList.add(emp);
} private static void clearEmp() {
for (int i = 0; i < employeeLists.length; i++) {
EmployeeList employeeList = employeeLists[i];
employeeList.claerEmp();
System.out.println("清理所有员工结束...");
}
} /**
* 对操作对象的Id进行hash(此处取余)
*
* @param id
* @return
*/
public static int hashIndex(int id) {
return id % SIZE;
} } /**
* 员工链表类
*/
class EmployeeList { public Emp head = new Emp(); /**
* 添加用户
*
* @param emp
*/
public void add(Emp emp) {
Emp cur = head;
while (true) {
if (cur.next == null) {
cur.next = emp;
System.out.println(emp.getName() + "添加成功");
break;
}
cur = cur.next;
}
} /**
* 打印该链表所有用户
*/
public void findAll() {
Emp cur = head.next;
while (true) {
if (cur == null) {
System.out.print("null");
break;
}
System.out.print("[" + cur.getId() + "," + cur.getName() + "]->");
cur = cur.next;
}
} /**
* 根据员工ID查询
*
* @param id
*/
public void findOne(int id) {
Emp cur = head.next;
while (true) {
if (cur == null) {
System.out.println(id + "对应的员工不存在.");
break;
}
if (cur.getId() == id) {
System.out.println("[" + cur.getId() + "," + cur.getName() + "]");
break;
} else {
cur = cur.next;
}
}
} /**
* 删除员工
*
* @param id
*/
public void delete(int id) {
Emp cur = head;
while (true) {
if (cur.next == null) {
System.out.println(id + "对应的员工不存在.");
break;
}
if (cur.next.getId() == id) {
cur.next = cur.next.next;
break;
} else {
cur = cur.next;
}
}
} public void claerEmp() {
if (head.next == null) {
return;
} else {
head.next = null;
}
} } /**
* 员工类
*/
class Emp {
private int id;
private String name;
public Emp next; public Emp() {
} public Emp(int id, String name) {
this.id = id;
this.name = name;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "Emp{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}

算法与数据结构-07-手写类HashTable的更多相关文章

  1. 利用神经网络算法的C#手写数字识别(二)

    利用神经网络算法的C#手写数字识别(二)   本篇主要内容: 让项目编译通过,并能打开图片进行识别.   1. 从上一篇<利用神经网络算法的C#手写数字识别>中的源码地址下载源码与资源, ...

  2. 利用神经网络算法的C#手写数字识别(一)

    利用神经网络算法的C#手写数字识别 转发来自云加社区,用于学习机器学习与神经网络 欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 下载Demo - 2.77 MB (原始地址):handwri ...

  3. 利用神经网络算法的C#手写数字识别

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 下载Demo - 2.77 MB (原始地址):handwritten_character_recognition.zip 下载源码 - 70. ...

  4. k最邻近算法——使用kNN进行手写识别

    上篇文章中提到了使用pillow对手写文字进行预处理,本文介绍如何使用kNN算法对文字进行识别. 基本概念 k最邻近算法(k-Nearest Neighbor, KNN),是机器学习分类算法中最简单的 ...

  5. 在opencv3中实现机器学习算法之:利用最近邻算法(knn)实现手写数字分类

    手写数字digits分类,这可是深度学习算法的入门练习.而且还有专门的手写数字MINIST库.opencv提供了一张手写数字图片给我们,先来看看 这是一张密密麻麻的手写数字图:图片大小为1000*20 ...

  6. 手写数字识别的k-近邻算法实现

    (本文为原创,请勿在未经允许的情况下转载) 前言 手写字符识别是机器学习的入门问题,k-近邻算法(kNN算法)是机器学习的入门算法.本文将介绍k-近邻算法的原理.手写字符识别问题分析.手写字符识别的k ...

  7. 30个类手写Spring核心原理之环境准备(1)

    本文节选自<Spring 5核心原理> 1 IDEA集成Lombok插件 1.1 安装插件 IntelliJ IDEA是一款非常优秀的集成开发工具,功能强大,而且插件众多.Lombok是开 ...

  8. 4.redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现?

    作者:中华石杉 面试题 redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现? 面试官心理分析 如果你连这个问题都不知道,上来就懵了,回答不出来,那线上你写代码的时候,想当 ...

  9. 机器学习框架ML.NET学习笔记【5】多元分类之手写数字识别(续)

    一.概述 上一篇文章我们利用ML.NET的多元分类算法实现了一个手写数字识别的例子,这个例子存在一个问题,就是输入的数据是预处理过的,很不直观,这次我们要直接通过图片来进行学习和判断.思路很简单,就是 ...

  10. 『练手』手写一个独立Json算法 JsonHelper

    背景: > 一直使用 Newtonsoft.Json.dll 也算挺稳定的. > 但这个框架也挺闹心的: > 1.影响编译失败:https://www.cnblogs.com/zih ...

随机推荐

  1. kill 进程时遇到的一件有意思的事情

    案例现象 一般来讲,我们在 kill 掉一个进程的时候通常有两个选择: 找到进程的 pid 号,然后执行 kill 命令 找到进程的名字,然后执行 pkill 命令 pkill 和 kill 命令都是 ...

  2. MongoDB 和 MySQL 之间有何区别?

    MongoDB 和 MySQL 是两个可用于存储和管理数据的数据库管理系统.MySQL 是一个关系数据库系统,以结构化表格格式存储数据.相比之下,MongoDB 以更灵活的格式将数据存储为 JSON ...

  3. HDU - 2181 :哈密顿绕行世界问题

    Descriptions: 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市. Input 前20行的第i行有3个数,表示与第i个 ...

  4. 二、Mycat安装

    系列导航 一.Mycat实战---为什么要用mycat 二.Mycat安装 三.mycat实验数据 四.mycat垂直分库 五.mycat水平分库 六.mycat全局自增 七.mycat-ER分片 万 ...

  5. 【驱动】I2C驱动分析(二)-驱动框架

    I2C驱动框架简介 I2C 驱动属于总线-设备-驱动模型的,与I2C总线设备驱动模型相比,大体框架是一样,系统的整体框架如下所示. 最上层是应用层,在应用层用户可以直接用open read write ...

  6. WebGPU光追引擎基础课:使用WebGPU绘制三角形

    大家好~我开设了"WebGPU光追引擎基础课"的线上课程,从0开始,在课上带领大家现场写代码,使用WebGPU开发基础的光线追踪引擎 课程重点在于基于GPU并行计算,实现BVH构建 ...

  7. freeswitch修改mod_sofia模块并上报自定义头域

    概述 在之前的文章中,我们介绍了如何使用fs的event事件机制来获取呼叫的各种信息. 这些event事件一般都是底层模块定义好的,其中的各种信息已经很完备了,日常的开发需求都可以满足. 但是,总有一 ...

  8. hdu 5234

    题意:求在不超过k的情况下,最多可以得到多少价值. 三维dp,结合01背包,第三维就是用来保存在不同的背包容量下能得到的最大价值,也就是第三维有很多状态. #include<iostream&g ...

  9. php开发中常见的漏洞点(一) 基础sql注入

    前言 本系列为小迪2022的学习笔记,仅用于自我记录. 正文 在一般情况下,一个网站的首页大致如下 在上方存在着各种各样的导航标签.链接.而一般情况下网站的导航会用参数进行索引的编写,比如id.pag ...

  10. python json.loads()、json.dumps()和json.dump()、json.load()区别

    json.loads().json.dumps()和json.dump().json.load()分别是两组不同用法 带s的用于数据类型的转换,不带s的用于操作文件. json.loads().jso ...