算法与数据结构-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 ...
随机推荐
- 【C++第三方库】Windows下编译和使用 WebSocket++/WebSocketpp
应用场景: 使用C++开发一个支持websocket协议的服务进程,可与HTML5(浏览器js文件)通信.来实现替换基于firebreath框架的跨浏览器插件开发. 当前,讲述websocketpp开 ...
- 【每日一题】40. 旅游 (树形DP解决树的最大独立集)
补题链接:Here 算法涉及:树形DP寻找树上最大独立集 一开始想到是利用 树形DP 找树的直径问题,但这里由于可以利用走过的点衍生,所以不符合树的直径问题 查询了一下资料这道题是属于: 树的最大独立 ...
- vivo悟空活动中台 - 微组件多端探索
本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/oGX4XSm8F4fa1ocLdpyqlA作者:悟空中台研发团队 [悟空活动中台]系列往期精 ...
- Web Components从技术解析到生态应用个人心得指北
Web Components浅析 Web Components 是一种使用封装的.可重用的 HTML 标签.样式和行为来创建自定义元素的 Web 技术. Web Components 自己本身不是一个 ...
- vue 状态管理 五、Module用法
系列导航 vue 状态管理 一.状态管理概念和基本结构 vue 状态管理 二.状态管理的基本使用 vue 状态管理 三.Mutations和Getters用法 vue 状态管理 四.Action用法 ...
- canvas验证码 uni-app/小程序
1 <template> 2 <view class="logo-wrapper"> 3 <view class="logo-img&quo ...
- lucene.net全文检索(二)lucene.net 的封装
查询 public class LuceneQuery : ILuceneQuery { #region Identity private Logger logger = new Logger(typ ...
- [java] - 数据库连接工具类
package util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLExceptio ...
- Go-数据类型-函数
函数类型 函数声明本质上是定义了函数类型的变量 package main import "fmt" // 定义了函数,本质上是在全局作用域中声明了一个函数类型的变量 info 其类 ...
- ARMv8.0下duckdb的安装与编译过程-解决 Failed to allocate block of 2048 bytes
ARMv8.0下duckdb的安装与编译过程-解决 Failed to allocate block of 2048 bytes 背景 duckdb 是一个很流行的单机版数据库引擎 同事下载了相关的预 ...