自学内容网 自学内容网

尚硅谷Java数据结构--哈希表(链表)

以下是Java代码实现

package DataStructure;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 86178
 * Date: 2024-03-01
 * Time: 8:56
 */
public class HashTable {
    public static void main(String[] args) {
        HashTab h=new HashTab(7);
        Emp e1=new Emp(6,"lisa");
        Emp e2=new Emp(2,"tom");
        Emp e3=new Emp(12,"nina");
        Emp e4=new Emp(13,"lily");
        Emp e5=new Emp(8,"mike");
        Emp e6=new Emp(5,"jack");
        h.add(e1);
        h.add(e2);
        h.add(e3);
        h.add(e4);
        h.add(e5);
        h.hashlist();
        h.find(12);
    }
}
class Emp{
    //员工信息
    public int id;
    public String name;
    public Emp next;//next默认为空
    public Emp(int id,String name){
        this.id=id;
        this.name=name;
    }
    @Override
    public String toString() {
        return "[id="+id+" name="+name+"]";
    }
}
class EmpList{
    //员工链表
    private Emp head;//头指针 指向有效的Emp节点 默认为空
    public Emp getHead(){
        return head;
    }
    //todo 在链表中增加Emp节点
    public void add(Emp e){
        if(head==null){
            head=e;
            return ;
        }
        else{
            Emp cur=head;
            while(cur.next!=null){
                cur=cur.next;
            }
            cur.next=e;
        }
    }
    //遍历链表的信息
    public void list(int no){
        Emp cur=head;
        if(cur==null){
            System.out.println("第"+(no+1)+"条链表为空");
            return;
        }
        System.out.println("第"+(no+1)+"条链表信息如下");
        while(cur!=null){
            System.out.println(cur);
            cur=cur.next;
        }
    }
    public void FindEmp(int no){
        //查找某个员工是否存在
        if(head==null){
            System.out.println("链表为空,无法查找");
            return ;
        }
        Emp cur=head;
        while(cur!=null){
            if(cur.id==no){
                System.out.println("找到了,该员工的信息:"+cur);
                return;
            }
            cur=cur.next;
        }
        if(cur==null){
            System.out.println("抱歉,查无此人");
            return;
        }
    }
}
class HashTab{
    //hash 同时管理多条链表
    //todo 散列函数
    private EmpList[] EmpArr;
    private int eSize;
    public HashTab(int size){
        EmpArr=new EmpList[size];
        this.eSize=size;
        //todo 坑 (分别初始化每一条链表)
        for(int i=0;i<eSize;i++){
            EmpArr[i]=new EmpList();
        }
    }
    //todo 添加emp
    public void add(Emp e){
        //根据员工的id 判断员工应该添加到哪一个链表
        int EmpListNo=function(e.id);
        //将e加入到对应链表中
        EmpArr[EmpListNo].add(e);

    }
    public void hashlist(){
        //遍历hash表
        for(int i=0;i<eSize;i++){
            EmpArr[i].list(i);
            System.out.println("----------------------------------------");
        }
    }
    public void find(int no){
        int EmpListNo=function(no);
        EmpArr[EmpListNo].FindEmp(no);
    }
    //todo 编写一个散列函数 取模法
    public int function(int id){
        return id % eSize;
    }
}

原文地址:https://blog.csdn.net/m0_70094411/article/details/136389317

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!