哈希表
- 哈希表又称为散列表,它是一种以键值对形式来存储数据的结构,只要输入待查找的key,就可以通过该key寻找到对应的值。对应函数:y = f(key)
- 通过把关键码映射到表中的对应位置来访问对应信息,来加快查找速度
- 哈希表用的是数据支持下标随机、访问数据的特性来实现的,所以说哈希表是数组的扩展,是由数组演化而成。
- 数据储存 可以通过 数组+链表 的方式来实现
public class HashTableDemo {
public static void main(String[] args) {
HashTable hashTable = new HashTable(5);
Course course1 = new Course(1, "课程1");
Course course2 = new Course(2, "课程2");
Course course3 = new Course(3, "课程3");
Course course4 = new Course(4, "课程4");
Course course5 = new Course(5, "课程5");
Course course6 = new Course(6, "课程6");
hashTable.add(course1);
hashTable.add(course2);
hashTable.add(course3);
hashTable.add(course4);
hashTable.add(course5);
hashTable.add(course6);
hashTable.show();
System.out.println(hashTable.findById(7));
}
}
class HashTable {
CourseLinked[] node;
int maxSize;
public HashTable(int maxSize) {
this.maxSize = maxSize;
node = new CourseLinked[maxSize];
for (int i = 0; i < maxSize; i++) {
node[i] = new CourseLinked();
}
}
public void add(Course course) {
int id = course.id % maxSize;
node[id].addCourse(course);
}
public void show() {
for (int i = 0; i < maxSize; i++) {
System.out.printf("index:%d\n", i);
node[i].show();
}
}
public Course findById(int id) {
int index = id % maxSize;
Course course = node[index].findCourseById(id);
return course;
}
}
class CourseLinked {
private Course head;
public void addCourse(Course course) {
if (head == null) {
head = course;
return;
}
Course cur = head;
while (cur.next != null) {
cur = cur.next;
}
cur.next = course;
}
public void show() {
Course cur = head;
while (cur != null) {
System.out.printf("id:%d ======= name:%s \n", cur.id, cur.courseName);
cur = cur.next;
}
}
public Course findCourseById(int id) {
if (head != null) {
Course cur = head;
while (cur != null) {
if (cur.id == id) {
return cur;
}
cur = cur.next;
}
}
return null;
}
}
class Course {
int id;
String courseName;
Course next;
public Course(int id, String courseName) {
this.id = id;
this.courseName = courseName;
}
@Override
public String toString() {
return "Course{" +
"id=" + id +
", courseName='" + courseName + '\'' +
", next=" + next +
'}';
}
}