跳到主要内容

二三:哈希表

一、应用实例

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;
}
}