哈希表的基本介绍
散列表(Hash table, 也叫哈希表),是根据关键码值(Key value)而进行访问的数据结构。也就是说,它通过把关键码值映射到表中的一个位置类访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
图片源自网络
通过哈希表实现酒店入住管理
用户链表
public class UserLinkList {
private User head = new User(1, "0", "0");
public User getHead() {
return head;
}
//加入链表
public void add(User user) {
if (head.getNext() == null) {
head.setNext(user);
return;
}
User temp = head.getNext();
while (temp.getNext() != null) {
temp = temp.getNext();
}
temp.setNext(user);
}
//链表查询
public User find(int roomID) {
User temp = head.getNext();
while (temp != null) {
if (temp.getRoomID() == roomID) {
return temp;
}
temp = temp.getNext();
}
return temp;
}
//删除某个用户
public void deleteUser(User user) {
User temp = head;
while (temp != null) {
if (temp.getNext().getRoomID() == user.getRoomID()) {
temp.setNext(temp.getNext().getNext());
}
temp = temp.getNext();
}
}
//遍历显示链表
public void showUser() {
User temp = head.getNext();
while (temp != null) {
System.out.println(temp.getId() + " " + temp.getName());
temp = temp.getNext();
}
}
}
酒店入住,退房,查房操作
public class HotelManage {
private final int SIZE = 5;//假定酒店有5层 每层5个房间
private final UserLinkList[] userLinkLists = new UserLinkList[SIZE];
//判断输入房间号是否符合规范
public boolean isEmpty(int roomNum) {
int roomNum = id % 1000;
if (num > 0 && roomNum <= 5) {
if (id > 1000 && id < 6000)
return true;
else return false;
} else
return false;
}
//创建哈希表
public void HashTab() {
for (int i = 0; i < SIZE; i++) {
userLinkLists[i] = new UserLinkList();
}
}
//入住方法
public void inHotel(User user) {
int row = user.getRoomID() / 1000 - 1;
if (userLinkLists[row].find(user.getRoomID()) == null) {
userLinkLists[row].add(user);
System.out.println("入住成功");
} else
System.out.println("房间已经住人!!!");
}
//退房方法
public void outHotel(int roomID) {
int row = roomID / 1000 - 1;
if (userLinkLists[row].find(roomID) != null) {
userLinkLists[row].deleteUser(userLinkLists[row].find(roomID));
System.out.println("退房成功!欢迎下次光临!");
} else
System.out.println("房间为空!请输入正确的退房信息!!");
}
//查询方法
public User find(int roomID) {
int row = roomID / 1000 - 1;
return userLinkLists[row].find(roomID);
}
}