二三:哈希表
一、应用实例
google公司的一个上机题:
有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址…),当输入该员工的id时,要求查找到该员工的 所有信息.
要求: 不使用数据库,尽量节省内存,速度越快越好=>哈希表(散列)
二、哈希表基本介绍
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。


三、思路分析
- 要求
1、 不使用数据库,速度越快越好=>哈希表(散列);
2、 添加时,保证按照id从低到高插入[课后思考:如果id不是从低到高插入,但要求各条链表仍是从低到高,怎么解决?];
3、 使用链表来实现哈希表,该链表不带表头[即:链表的第一个结点就存放雇员信息];
4、 思路分析并画出示意图;

四、代码实现
4.1Employee.java 雇员实体类
package com.feng.ch11_hashtab;
/*
* 表示一个雇员
* */
public class Employee {
private int id;
private String name;
private String sex;
private int age;
private Employee next; // 默认为空
public Employee(int id, String name, String sex, int age) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
@Override
public String toString() {
return "Employee{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Employee getNext() {
return next;
}
public void setNext(Employee next) {
this.next = next;
}
}