算法与数据结构-07-手写类HashTable
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的更多相关文章
- 利用神经网络算法的C#手写数字识别(二)
利用神经网络算法的C#手写数字识别(二) 本篇主要内容: 让项目编译通过,并能打开图片进行识别. 1. 从上一篇<利用神经网络算法的C#手写数字识别>中的源码地址下载源码与资源, ...
- 利用神经网络算法的C#手写数字识别(一)
利用神经网络算法的C#手写数字识别 转发来自云加社区,用于学习机器学习与神经网络 欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 下载Demo - 2.77 MB (原始地址):handwri ...
- 利用神经网络算法的C#手写数字识别
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 下载Demo - 2.77 MB (原始地址):handwritten_character_recognition.zip 下载源码 - 70. ...
- k最邻近算法——使用kNN进行手写识别
上篇文章中提到了使用pillow对手写文字进行预处理,本文介绍如何使用kNN算法对文字进行识别. 基本概念 k最邻近算法(k-Nearest Neighbor, KNN),是机器学习分类算法中最简单的 ...
- 在opencv3中实现机器学习算法之:利用最近邻算法(knn)实现手写数字分类
手写数字digits分类,这可是深度学习算法的入门练习.而且还有专门的手写数字MINIST库.opencv提供了一张手写数字图片给我们,先来看看 这是一张密密麻麻的手写数字图:图片大小为1000*20 ...
- 手写数字识别的k-近邻算法实现
(本文为原创,请勿在未经允许的情况下转载) 前言 手写字符识别是机器学习的入门问题,k-近邻算法(kNN算法)是机器学习的入门算法.本文将介绍k-近邻算法的原理.手写字符识别问题分析.手写字符识别的k ...
- 30个类手写Spring核心原理之环境准备(1)
本文节选自<Spring 5核心原理> 1 IDEA集成Lombok插件 1.1 安装插件 IntelliJ IDEA是一款非常优秀的集成开发工具,功能强大,而且插件众多.Lombok是开 ...
- 4.redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现?
作者:中华石杉 面试题 redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现? 面试官心理分析 如果你连这个问题都不知道,上来就懵了,回答不出来,那线上你写代码的时候,想当 ...
- 机器学习框架ML.NET学习笔记【5】多元分类之手写数字识别(续)
一.概述 上一篇文章我们利用ML.NET的多元分类算法实现了一个手写数字识别的例子,这个例子存在一个问题,就是输入的数据是预处理过的,很不直观,这次我们要直接通过图片来进行学习和判断.思路很简单,就是 ...
- 『练手』手写一个独立Json算法 JsonHelper
背景: > 一直使用 Newtonsoft.Json.dll 也算挺稳定的. > 但这个框架也挺闹心的: > 1.影响编译失败:https://www.cnblogs.com/zih ...
随机推荐
- 【计算机网络】soap和rest简单比较整理
https://www.bilibili.com/video/BV1ht411U7fC/?spm_id_from=333.337.search-card.all.click&vd_source ...
- CH#17C 舞动的夜晚(最大流+强连通分量)
舞动的夜晚 CH Round #17 描述 L公司和H公司举办了一次联谊晚会.晚会上,L公司的N位员工和H公司的M位员工打算进行一场交际舞.在这些领导中,一些L公司的员工和H公司的员工之间是互相认识的 ...
- @Constraint注解,做特殊的入参校验
// @Constraint 是 Java 中的注解之一,用于标记自定义的约束注解.约束注解通常用于数据验证,用来限制字段的取值或格式,确保数据的合法性. @Constraint(validatedB ...
- redis管道技术pipeline一 ——api
import java.io.UnsupportedEncodingException; import java.util.Set; import org.springframework.beans. ...
- 使用aop去自定义注解,实现用户在请求的时候记录下来,如日志功能等
首先搞清楚aop的几个概念: AOP即是面向切面,是Spring的核心功能之一,主要的目的即是针对业务处理过程中的横向拓展,以达到低耦合的效果. 「切面(Aspect)」:一个关注点的模块化.以注解@ ...
- freeswitch配置SBC实例
概述 freeswitch 是一款好用的开源软交换平台. 随着voip客户的发展和运营商网络的升级换代,SBC在对接测试中的应用场景越来越多. freeswitch通过简单的安装配置即可满足大部分SB ...
- C#设计模式11——享元模式的写法
1. 什么是享元模式? 享元模式是一种结构型设计模式,目的是通过共享对象来尽量减少内存使用和对象数量.它通过将对象分为可共享的和不可共享的来实现这一目的. 2. 为什么要使用享元模式? 使用享元模式可 ...
- Clickhouse执行处理查询语句(包括DDL,DML)的过程
Clickhouse执行处理查询语句(包括DDL,DML)的过程 总体过程 启动线程处理客户端接入的TCP连接: 接收请求数据,交给函数executeQueryImpl()处理: executeQue ...
- 12-Verilog-同步FIFO设计
同步FIFO和异步FIFO FIFO分为一个同步FIFO,一个异步FIFO,FIFO有读口和写口 读写时钟是一个,就是同步FIFO;读写时钟不是一个,异步FIFO IP核设计中,一般使用同步FIFO设 ...
- C++17 解构绑定
在python中,加入我们有一个函数返回了两个数值,如: def getData(x, y): return x,y 那么我们在使用这个函数时只需要使用两个新变量去接收函数返回值就可以: a,b = ...