为了账号安全,请及时绑定邮箱和手机立即绑定

我们可以使用自定义equals方法进行收集算法吗

我们可以使用自定义equals方法进行收集算法吗

慕莱坞森 2021-05-05 21:38:29
我有一个作为Student的自定义类,它具有两个不同的equals方法(equals,equals1),并且具有Student1对象的两个集合,如list1和list2。当我确实使用list1.retainAll(list2)时,需要使用equals1机制而不是eqauls方法。当我们的客户类中确实存在多个equals机制时,是否可以使用任何API来提及equals方法名称?例子:class Student {    public String name;    public Student(String name) {        this.name = name;    }    public boolean equals(Object obj) {        return super.equals(obj);    }    public boolean equals1(Object obj) {        if(obj == null) return false;        if(!(obj instanceof Student)) return false;        Student student = (Student) obj;        if(this.name.equals(student.name)) {            return true;        } else {            return false;        }    }}public class Demo {    public static void main(String[] args) {        List<Student> list1 = new ArrayList<Student>();        list1.add(new Student("AAA"));        list1.add(new Student("BCD"));        List<Student> list2 = new ArrayList<Student>();        list2.add(new Student("AAA"));        list2.add(new Student("CDE"));        // Intersection of list1 and list2        list1.retainAll(list2);        for (Student student : list1) {            System.out.println(student.name);        }    }}如果使用equals1方法,则预期结果为[AAA],但在这种情况下,将执行默认的equals方法,因此结果为空。我们如何使用自定义的equals方法进行收集算法。
查看完整描述

2 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

equals() 很特别

请记住,它equals()是特殊的,因为整个collections API都依赖于它。

此外集合API(在与它的名字一样“哈希”至少什么HashSetHashTable)依靠之间的关系equals()hashcode():该协议是当过equals()返回true两个对象从返回的值相同hashcode()。最重要的是,hashcode()在对象的生存期内,重新调整的值一定不能更改。

您的实现有可能违反此规则,导致集合API zu失败,因为您的equals1()方法使用可变字段name


查看完整回答
反对 回复 2021-05-19
  • 2 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信