JAVA 集合框架hashCode()和equals() (六)

本文介绍了如何在Set中实现hashCode与equals的一致性,重点讲解LinkedHashSet的使用,以及如何确保添加对象时的唯一性。通过实例演示了如何判断两个对象在LinkedHashSet中的行为差异,以及如何根据equals方法进行比较。
摘要由CSDN通过智能技术生成

1、两个方法的要求

要求:向Set中添加数据,其所在类一定要重写hashCode()和equals()。hashCode与equals()要保持一致。(实现对等规则)
对一致的理解

  • HashSet集合判断两个元素相等的标准:两个对象通过hashCode()方法比较相等,并且两个对象的equals()返回值也相等。
  • 即相等对象必须具有相等的散列码。
    技巧:自动生成

HashSet 底层:数组+链表结构

2、LinkedHashSet

LinkedHashSet 添加数据的同时,实现双向链表记录前驱后继。
优点:频繁的遍历操作可使用,效率较高

@Test
    public void hashSetest(){
        Set set1 = new LinkedHashSet();
        set1.add(123);
        set1.add(123);
        set1.add(456);
        set1.add("aa");
        set1.add("BB");
        set1.add(new Person());
        //次处的两个类对应得两个对象的equals() 方法只比较 name
        // 相同返回true
        System.out.println("两个对象比较返回值为:");
        Person person = new Person("Tom", "程序员", 26);
        User user = new User("Tom", "程序员", 26);
        System.out.println(person.equals(user));//true

        set1.add(new Person("Tom","程序员",26));
        set1.add(new User("Tom","程序员",26));

        System.out.println("遍历的结果为:(可以看出两个对象只有一个存入set1)");
        System.out.println("");
        Iterator iterator = set1.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

运行结果

两个对象比较返回值为:
使用equals()
false
遍历的结果为:(可以看出两个对象只有一个存入set1)

123
456
aa
BB
Person{name='null', profession='null', age=0}
Person{name='Tom', profession='程序员', age=26}
com.clection.User@3dbb3858
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值