HashSet如何使用(详解)

1.HashSet是Set接口下面的一个实现类,HashSet集合的特点是无序不可重复的

2.HashSet存储对象时,需要重写equals方法和hashCode方法

package com.qfedu.b_;

import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

class Person {
    private int age;
    private String name;

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

    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name='" + 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 boolean equals(Object o) {
        /**
         * 先比较两个对象的内存地址
         */
        if (this == o) return true;
        /**
         * 再比较两个对象的属性
         */
        if (o == null || getClass() != o.getClass()) return false;
        /**
         * 多态的向下转型,把o转为person
         */
        Person person = (Person) o;
        /**
         * 比较对象的属性是否全部都相等
         */
        return age == person.age && Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(age, name);
    }
}
public class Demo_03 {
    public static void main(String[] args) {
        /**
         * 实例化HashCode集合
         */
        Set<Person> set = new HashSet<>();
        /**
         * 实例化几个对象
         */
        Person person1 = new Person(20, "张三");
        Person person2 = new Person(21, "李四");
        Person person3 = new Person(21, "王五");
        Person person4 = new Person(20, "张三");
        set.add(person1);
        set.add(person2);
        set.add(person3);
        set.add(person4);
        System.out.println(set);
        /**
         * 相等的两个对象的hash值相等,切只会存进集合中一个
         */
        System.out.println(person1.hashCode());
        System.out.println(person4.hashCode());
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值