概述
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
使用哈希表模拟Emp雇员节点CRUD
public class Emp {
public int id;
public String name;
public Emp next;
public Emp ( int id, String name) {
this . id = id;
this . name = name;
}
@Override
public String toString ( ) {
return "Emp{" +
"id=" + id +
", name='" + name + '\'' +
'}' ;
}
}
public class EmpLinkedList {
private Emp head;
public void deleteEmpById ( int id) {
if ( head == null) {
return ;
}
Emp temp = head;
while ( true ) {
if ( temp. id == id) {
head = temp. next;
break ;
}
if ( temp. next == null) {
break ;
}
if ( temp. next. id == id) {
temp. next = temp. next. next;
break ;
}
temp = temp. next;
}
}
public Emp findEmpById ( int id) {
if ( head == null) {
return null;
}
Emp temp = head;
while ( true ) {
if ( temp. id == id) {
break ;
}
if ( temp. next == null) {
temp = null;
break ;
}
temp = temp. next;
}
return temp;
}
public void list ( int no) {
if ( head == null) {
System. out. println ( "第" + ( no + 1 ) + "条链表为空" ) ;
return ;
}
System. out. print ( "第" + ( no + 1 ) + "条链表信息为" ) ;
Emp temp = head;
while ( true ) {
System. out. print ( temp + " --> " ) ;
if ( temp. next == null) {
break ;
}
temp = temp. next;
}
System. out. println ( ) ;
}
public void add ( Emp emp) {
if ( head == null) {
head = emp;
return ;
}
Emp temp = head;
while ( temp. next != null) {
temp = temp. next;
}
temp. next = emp;
}
}
public class HashTab {
private EmpLinkedList[ ] empLinkedListArray;
private int size;
public HashTab ( int size) {
this . empLinkedListArray = new EmpLinkedList [ size] ;
this . size = size;
for ( int i = 0 ; i < size; i++ ) {
empLinkedListArray[ i] = new EmpLinkedList ( ) ;
}
}
public void deleteById ( int id) {
int is = hashFun ( id) ;
empLinkedListArray[ is] . deleteEmpById ( id) ;
}
public void findEmpById ( int id) {
int is = hashFun ( id) ;
Emp emp = empLinkedListArray[ is] . findEmpById ( id) ;
if ( emp != null) {
System. out. println ( "id对应的值:" + emp) ;
}
}
public void list ( ) {
for ( int i = 0 ; i < size; i++ ) {
empLinkedListArray[ i] . list ( i) ;
}
}
public void add ( Emp emp) {
int empLinkedListNO = hashFun ( emp. id) ;
empLinkedListArray[ empLinkedListNO] . add ( emp) ;
}
private int hashFun ( int id) {
return id % size;
}
}
public class HashTabDemo {
public static void main ( String[ ] args) {
int id = 1 ;
HashTab hashTab = new HashTab ( 7 ) ;
String key = "" ;
Scanner input = new Scanner ( System. in) ;
while ( true ) {
System. out. println ( "add:添加 del:删除 list:显示 find:查找 exit:退出" ) ;
key = input. next ( ) ;
switch ( key) {
case "add" :
System. out. print ( "输入名字:" ) ;
String name = input. next ( ) ;
Emp emp = new Emp ( id++ , name) ;
hashTab. add ( emp) ;
break ;
case "del" :
System. out. println ( "输入key" ) ;
hashTab. deleteById ( input. nextInt ( ) ) ;
break ;
case "list" :
hashTab. list ( ) ;
break ;
case "find" :
System. out. println ( "输入key" ) ;
hashTab. findEmpById ( input. nextInt ( ) ) ;
break ;
case "exit" :
input. close ( ) ;
System. exit ( 0 ) ;
break ;
default :
input. close ( ) ;
System. exit ( 0 ) ;
break ;
}
}
}
}