哈希表的基础知识和三种操作

  • 哈希表的一些基础知识:

1 哈希表也叫做散列表,是通过关键码值来访问的数据结构。
2两者 之间的关系也可以称为散列函数。
3 存放数据的数组也叫做散列表。





  • 相关图像:

在这里插入图片描述





  • 一些注意事项:

1 辅助节点 temp=head;
2 哈希表是多个单链表的集合,通过访问id来寻找数据。
3 先将链表放在数组中,然后通过数组来调用相关的方法。
4 对象数组的初始化:首先声明数组,然后在构造中定义长度和创建各个元素的对象,否则数组为空,容易报错。





  • 相关代码:


import java.util.*;
public class Test {

    public static void main(String[] args){
        //创建一个哈希表对象。
        HashTable ht =new HashTable(7);

        //创建一个简单的菜单。
        String key="";
        Scanner scan =new Scanner(System.in);
        while(true){
            System.out.println("add:添加一个人");
            System.out.println("list:显示所有的人");
            System.out.println("exit:退出系统");
            key =scan.next();
            switch (key){
                case ("add"):
                    System.out.println("请输入id");
                    int id = scan.nextInt();
                    System.out.println("请输入name");
                    String name = scan.next();
                    Person p1 = new Person(id,name);
                    ht.add(p1);
                    System.out.println("添加成功");
                    break;

                case ("list"):
                    ht.list();
                    break;
                case ("exit"):
                    System.out.println("退出菜单成功");
                    System.exit(0);

                default:
                    System.out.println("输入错误,请再输入一遍");
            }
        }
    }
}

//创建一个哈希表类,管理多条链表。
class HashTable {
    public LinkList a[];
    int size;
    public HashTable(int size) {
        this.size = size;
        a = new LinkList[size];
        for(int i=0;i<size;i++){
            a[i] = new LinkList();
        }
    }
    public void add(Person p){
        //根据Person的id来添加到哪条链表。
        int linklist_id =hashFun(p.id);
        a[linklist_id].add(p);

    }

    //遍历所有的链表,和遍历出链表中所有的元素。
    public void list(){
        for(int i=0;i<a.length;i++){
            a[i].list();
        }
    }

    //定义一个哈希函数方法。
    public int  hashFun(int id){
        return id%size;
    }
}
//创建一个链表类。
class LinkList{
    //创建一个头结点。
    Person head =new Person(0,"");
    //定义一个加入元素的方法。
    public void add(Person p){

        if(head.next==null){
            head .next= p;
        }
        else{
            Person temp = head;
            while(true){
                if(temp.next==null){
                    break;
                }
                temp=temp.next;
            }
            temp.next = p;
        }
    }

    //定义一个遍历的方法。
    public void list(){
        Person temp =head;
        if(head.next==null){

            System.out.println("当前链表为空");
        }
        else{
            System.out.println("当前链表信息为:");

            while(true){
                if(temp.next==null){
                    break;
                }
                else {
                    System.out.println("id="+temp.next.id + "   " + "name="+temp.next.name);
                    temp = temp.next;
                }
            }
        }
    }
}

class Person {
    int id;
    String name;
    Person next;
    public Person(int id,String name){
        this.id = id;
        this.name = name;
    }
}




  • 代码结果:

在这里插入图片描述





  • 相关视频:

尚硅谷Java数据结构与java算法(Java数据结构与算法)

尚硅谷Java数据结构与java算法(Java数据结构与算法)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值