当前位置:   article > 正文

java哈希_java实现哈希表

java scanner 哈希

public class HashTabDemo {

public static void main(String []args){

HashTab hashTab = new HashTab(7); //实例化一个有7条链表的哈希表

String key = "";

Scanner scanner = new Scanner(System.in);

while (true){

System.out.println("add:添加雇员");

System.out.println("list:显示雇员");

System.out.println("exit:退出");

System.out.println("find: 查找");

System.out.println("delete: 删除");

key = scanner.next();

switch (key){

case "add":

System.out.println("请输入id:");

int id = scanner.nextInt();

System.out.println("请输入name:");

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.fidEmpById(id);

break;

case "delete":

System.out.println("输入要删除雇员的id:");

id = scanner.nextInt();

hashTab.deleteById(id);

default:

break;

}

}

}

}

//员工

class Emp{

public String name;

public int id;

public Emp next = null;

public Emp(int id,String name){

this.id = id;

this.name = name;

}

}

//创建哈希表管理多条链表

class HashTab{

private LinkList [] linkListArray;

int size;//表示有多少条链表

public HashTab(int size){ //初始化链表条数

this.size = size;

linkListArray = new LinkList[size];

for (int i = 0;i < size; i++){

linkListArray [i] = new LinkList();

}

}

//哈希表添加雇员

public void add(Emp emp){

int linkListNO = hashFun(emp.id); //根据员工的id判断添加到哪条链表

linkListArray[linkListNO].add(emp);

}

public int hashFun(int id){ //散列函数,

return id % size;

}

//遍历哈希表

public void list(){

for (int i = 0; i < size; i++){

linkListArray[i].list(i);

}

}

//输入id查找雇员

public void fidEmpById(int id){

int likListNO = hashFun(id);

Emp emp = linkListArray[likListNO].findEmpById(id);

if (emp ==null){

System.out.println("没找到");

}

else{

System.out.println("在第"+likListNO+"条链表找到员工"+"id:"+emp.id+" "+"name:"+emp.name);

}

}

//输入id删除雇员

public void deleteById(int id){

int linkListNO = hashFun(id);

linkListArray[linkListNO].deleteById(id);

}

}

//创建链表

class LinkList{

private Emp head = null;

// 添加雇员

public void add(Emp emp){

if (head == null){ //添加第一个雇员

head = emp;

return;

}

Emp curEmp = head; //如果添加的不是第一个雇员,用辅助 指针定位到最后

while (true){

if (curEmp.next == null){

break;

}

curEmp = curEmp.next; //指针后移

}

curEmp.next = emp;

}

//遍历链表

public void list(int no){

if (head == null){

System.out.println("第"+no+"条链表为空");

return;

}

System.out.printf("第"+no+"条链表信息为:");

Emp curEmp = head;

while (true){

System.out.printf("->id:" + curEmp.id+" "+"name:" + curEmp.name+" ");

if (curEmp.next == null){ //遍历到最后节点退出循环

break;

}

curEmp = curEmp.next; //指针后移

}

System.out.println(); //输出第一条链表之后换行

}

//根据id查找雇员

//如果找到返回Emp,没找到返回空

public Emp findEmpById(int id){

if (head == null){

System.out.println("链表为空");

return null;

}

Emp curEmp = head;

while (true){

if (curEmp.id == id){

break; //找到了就退出循环将当前指针指向要查的雇员

}

if (curEmp.next == null){ //到最后一个节点,说明没找到

curEmp = null;

break;

}

curEmp = curEmp.next;

}

return curEmp;

}

// 删除雇员

public void deleteById(int id){

if (head == null){

System.out.println("链表为空");

return;

}

Emp curEmp = head;

while (true){

if (head.id == id){ //判断删除的是不是头节点

head = head.next;

System.out.println("删除成功");

break;

}else if (curEmp.next == null){ //下一个节点为空说明没有此id,下个节点不为空继续判断

System.out.println("要删除的雇员不存在");

break;

}else if (curEmp.next.id == id){

curEmp.next = curEmp.next.next; //删除指定id的节点

System.out.println("删除成功");

break;

}

curEmp = curEmp.next;

}

}

}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/775627
推荐阅读
相关标签
  

闽ICP备14008679号