HashSet集合学习

public class 去除重复元素 {
    public static void main(String[] args) {
        //创建HashSet集合
        HashSet<Student> hSet = new HashSet<>();
        //添加学生对象,在Student类中已经重写过hashCode方法,不然下面属性值一样的对象则会重复添加
        //因为HashSet集合是根据哈希值来确定存入底层数组中的位置,不重写则是计算的地址值。
        Student stu1 = new Student("11c",21);
        Student stu2 = new Student("hpy",22);
        Student stu3 = new Student("hpy",22);
        //添加对象
        hSet.add(stu1);
        hSet.add(stu2);
        hSet.add(stu3);//false
        //迭代器遍历
        Iterator<Student> it = hSet.iterator();
        while (it.hasNext()){
            Student next = it.next();
            System.out.println(next);
        }
    }
}

JavaBean

public class Student {
    private String name;
    private int age;

    public Student() {
    }

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

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    @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(name, age);
    }

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

HashSet是一个无序,不重复,无索引的集合。

在上尼古拉斯阿伟老师的课的时候,他提出了5个问题,我将以我所学一一给出解答。

HashSet集合的底层数据结构是什么样的。

根据哈希值计算放入底层的数组位置,如果有重复位置的元素,比较若相同,丢弃该元素,不同则以链表的形式挂在该位置的元素下面。(java8以后),在底层由数组,链表,红黑树构成。

HashSet集合为何存和取的顺序不一样?

因为不是按顺序存的,而是根据哈希值存入,但是遍历的时候,是按顺序遍历的。

HashSet集合为什么没有索引?

因为索引不好规定,在链表上或者红黑树上,无法确定索引。

 HashSet集合是通过什么方式去重的?

根据这两个方法比较,hashCode方法和equals方法,但是如果是自定义对象,必须重写,不然是以地址值相比,不同对象属性值相同也可以存入集合,这样就违背了HashSet集合的本意。

一点小随笔....↓

以前我认为到了某个阶段就会不迷茫了,比如高中的时候上了大学就不会迷茫了,专科的时候以为上了本科就不会迷茫了,其实只有拿到录取通知书的那一刻是不迷茫的,随后就会陷入前路何在的情绪中。现在也是这样,不知道自己毕业后能不能找到好的工作,可以不可以养活自己。我觉得人在哪个阶段都会迷茫,不知道何去何从,只有忙起来的时间才不会去想那些。自己的思维太过发散,我曾经怀疑自己是不是有ADHD,但是我打游戏的时候,或者做自己喜欢的事的时候注意力还是挺集中的,所以仅仅是学习习惯不好吧,maybe。

我容易给自己焦虑,跟自己内耗,说到底还是自己想要的太多,想成为很厉害的人,我的灵魂超脱,我的肉体懒惰。但现在好得多了,学会拒绝那些垃圾情绪,想得多没用,还是得着手做。我的表哥告诉我,不要让学习成为你的负担,而是兴趣驱动你的学习,F,我当然知道,但是怎么做到呢?

算是现阶段自己的想法吧,自己以后回头看的时候,会不会觉得好笑,幼稚,只要着手做就完了呀,笨蛋。

我的灵魂在我的心上撒了一把盐,让我的梦干渴。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值