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. 【C++第三方库】Windows下编译和使用 WebSocket++/WebSocketpp

    应用场景: 使用C++开发一个支持websocket协议的服务进程,可与HTML5(浏览器js文件)通信.来实现替换基于firebreath框架的跨浏览器插件开发. 当前,讲述websocketpp开 ...

  2. 【每日一题】40. 旅游 (树形DP解决树的最大独立集)

    补题链接:Here 算法涉及:树形DP寻找树上最大独立集 一开始想到是利用 树形DP 找树的直径问题,但这里由于可以利用走过的点衍生,所以不符合树的直径问题 查询了一下资料这道题是属于: 树的最大独立 ...

  3. vivo悟空活动中台 - 微组件多端探索

    本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/oGX4XSm8F4fa1ocLdpyqlA作者:悟空中台研发团队 [悟空活动中台]系列往期精 ...

  4. Web Components从技术解析到生态应用个人心得指北

    Web Components浅析 Web Components 是一种使用封装的.可重用的 HTML 标签.样式和行为来创建自定义元素的 Web 技术. Web Components 自己本身不是一个 ...

  5. vue 状态管理 五、Module用法

    系列导航 vue 状态管理 一.状态管理概念和基本结构 vue 状态管理 二.状态管理的基本使用 vue 状态管理 三.Mutations和Getters用法 vue 状态管理 四.Action用法 ...

  6. canvas验证码 uni-app/小程序

    1 <template> 2 <view class="logo-wrapper"> 3 <view class="logo-img&quo ...

  7. lucene.net全文检索(二)lucene.net 的封装

    查询 public class LuceneQuery : ILuceneQuery { #region Identity private Logger logger = new Logger(typ ...

  8. [java] - 数据库连接工具类

    package util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLExceptio ...

  9. Go-数据类型-函数

    函数类型 函数声明本质上是定义了函数类型的变量 package main import "fmt" // 定义了函数,本质上是在全局作用域中声明了一个函数类型的变量 info 其类 ...

  10. ARMv8.0下duckdb的安装与编译过程-解决 Failed to allocate block of 2048 bytes

    ARMv8.0下duckdb的安装与编译过程-解决 Failed to allocate block of 2048 bytes 背景 duckdb 是一个很流行的单机版数据库引擎 同事下载了相关的预 ...