java哈希表学习个人笔记

哈希表的基本介绍

散列表(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);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值