java 集合HashSet

关于HashSet的一点理解

附上代码 :

import java.util.HashSet;

public class HashSetTest {
    public static void main(String [] args){
        HashSet<Person> people = new HashSet<>();

        Person p1 = new Person("aaa","男",18);
        Person p2 = new Person("bbb","女",18);
        Person p3 = new Person("ccc","男",19);
        Person p4 = new Person("aaa","女",19);

        people.add(p1); people.add(p2);
        people.add(p3); people.add(p4);

        for (Person p : people){
            System.out.print(p);
        }
        //System.out.println(people);

    }
    private static class Person{
        private String name,sex;
        private int age;
        Person(String name,String sex,int age){
            this.name = name;
            this.sex = sex;
            this.age = age;
        }
        @Override
        public String toString() {
            return "\n[ "+name+" , "+sex+" , "+age+" ]\n";
        }
        @Override
        public boolean equals(Object obj) {
            /** 为同一个对象时 **/
            if (obj == this){
                return true;
            }
            /** 类型相同时 ,进而根据自己的需要进行筛选**/
            if (obj instanceof Person){
                if (((Person) obj).name.equals(this.name)){
                    return true;
                }
                return false;
            }
            return false;
        }

        @Override
        public int hashCode() {
            return this.name.hashCode(); 
            //根据自己的需要生成Hash散列值
        }
    }
}
这里的同一个对象指的是 对象内存地址相同 
同一类型指的是 继承或实现的某个共同父类的对象

Person p1 = new Person(...);
Person p2 = new Person(...);
Person p3 = p1;
p3 指向 p1的内存块地址 所以他们是同一个对象
p1 p2 都是Person对象 有各自的内存地址  所以 p1 p2 为同一类型但是不是同一个对象

都是个人的一些理解 慢慢学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值