构建hashtable表

//创建hash表
class HashTable{
    private EmpLinkList[] empLinkListArray;
    private static int size;
    public HashTable(int size) {
        this.size = size;
        empLinkListArray = new EmpLinkList[size];
        //对象数组需要对每个对象依次初始化
        for(int i = 0;i<size;i++){
            empLinkListArray[i] = new EmpLinkList();
        }
    }

    //添加
    public void add(Emp emp){
        //根据员工的id得到该员工应该加入的链表
        int empLinkListNum = Fun(emp.id);
        empLinkListArray[empLinkListNum].add(emp);
    }

    //遍历
    public void list(){
        for(int i = 0;i<size;i++){
            empLinkListArray[i].list(i);
        }
    }

    //构建一个散列函数  一个简单的取模法
    public static int Fun(int id){
        return id % size;
    }

    //查找
    public void findEmp(int id){
        int empLinkListNum = Fun(id);
        Emp emp = empLinkListArray[empLinkListNum].findEmp(id);
        if(emp != null){//找到
            System.out.println("在第"+empLinkListNum+"条连链表上找到了该雇员");
        }else{
            System.out.println("在hash表中没有找到该雇员");
        }
    }

    public void delete(int id){
        int empLinkListNum = Fun(id);
        empLinkListArray[empLinkListNum].delete(id);
    }
}

//雇员对象
class Emp{
    public int id;
    public String name;
    public Emp next;

    public Emp(int id, String name) {
        this.id = id;
        this.name = name;
    }
}

//链表
class EmpLinkList{
   //头指针,直接指向第一个雇员
    private Emp head;

    //添加雇员到链表
    //假定都是添加到最后一位
    public void add(Emp emp){
      //如果是第一个
        if(head == null){
            head = emp;
            return;
        }
        //构造一个辅助指针
        Emp curEmp = head;
        while(true){
            if(curEmp.next == null){
                break;
            }else {
                curEmp = curEmp.next;
            }
        }
        curEmp.next = emp;
    }

    //遍历链表的雇员信息
    public void list(int i){
        if(head == null){
            System.out.println(i+"号链表为空");
            return;
        }
        System.out.print(i+"号链表的信息为:");
        Emp curEmp = head;
        while(true){
            System.out.println("id="+curEmp.id+"name="+curEmp.name);
            if(curEmp.next!=null){
                curEmp = curEmp.next;
            }else {
                break;
            }
        }
    }


    //查找
    public Emp findEmp(int id){
        //判断链表是否为空
        if(head == null){
            return null;
        }

        Emp curEmp = head;
        while (true){
            if(curEmp.id == id){
                return curEmp;
            }
            if(curEmp.next == null){
                //说明当前链表找不到
                return null;
            }
            curEmp = curEmp.next;
        }
    }

    //删除
    public void delete(int id){
        if(head == null){
            System.out.println("当前链表为空");
            return;
        }

        Emp curEmp = head;
        while (true){
            if(curEmp.id == id){
                head = curEmp.next;
                System.out.println("删除成功");
                break;
            }

            if(curEmp.next == null){
                System.out.println("当前链表没有你想要删除的元素");
                break;
            }
            else if(curEmp.next.id == id){
                curEmp.next = curEmp.next.next;
                System.out.println("删除成功");
                break;
            }
            curEmp = curEmp.next;
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值