HashSet实现类的使用

【1】放入Integer类型数据

复制代码
package com.msb.test06;

import java.util.HashSet;

/**
 * @author : liu
 * 日期:10:36:57
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class TestInteger {
    //这是一个main方法:是程序的入口
    public static void main(String[] args) {
        //创建一个HashSet集合
        HashSet<Integer> hs = new HashSet<>();
        System.out.println(hs.add(19));//true
        hs.add(5);
        hs.add(20);
        System.out.pringln(hs.add(19));//false没有被写入集合
        hs.add(41);
        hs.add(0);
        System.out.println(hs.size());//唯一  无序
        System.out.println(hs);
    }
}
复制代码

【2】放入String类型数据

复制代码
package com.msb.test06;

import java.util.HashSet;

/**
 * @author : liu
 * 日期:10:41:10
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class TestString {
    //这是一个main方法:是程序的入口
    public static void main(String[] args) {
        HashSet<String> hs=new HashSet<>();
        hs.add("hello");
        hs.add("apple");
        hs.add("banana");
        hs.add("html");
        hs.add("apple");
        hs.add("css");
        System.out.println(hs.size());
        System.out.println(hs);
    }
}
复制代码

【3】放入自定义引用数据类型的数据

复制代码
package com.msb.test06;

import java.util.HashSet;

/**
 * @author : liu
 * 日期:10:48:02
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class TestStudent {
    //这是一个main方法:是程序的入口
    public static void main(String[] args) {
        //创建一个HashSet集合
        HashSet<Student> hs=new HashSet<>();
        hs.add(new Student(19,"lili"));
        hs.add(new Student(20,"lulu"));
        hs.add(new Student(18,"feifei"));
        hs.add(new Student(19,"lili"));
        hs.add(new Student(10,"nana"));
        System.out.println(hs.size());
        System.out.println(hs);
    }
}
复制代码

上面自定义的类型不满足唯一、无序类型数据的特点。为什么呢?

【4】HashSet原理图:(简要原理图)

 

 

 

复制代码
package com.msb.test06;

import java.util.Objects;

/**
 * @author : liu
 * 日期:10:47:02
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class Student {
    private int age;
    private String name;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }

    public Student(int age, String name) {
        this.age = age;
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(age, name);
    }
}
复制代码

 【5】疑问:

1、数组的长度是多少,

2、数组的类型是啥

3、hashCode ,equals方法真的调用了吗?验证

4、底层的表达式是什么

5、同一个位置的数据向前放还是向后放

6、放入数组中的数据是直接放的吗?是否封装为对象了?

posted @   爱的加勒比  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示