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

我有一个作为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方法进行收集算法。




慕莱坞森
浏览 144回答 2
2回答

jeck猫

equals()&nbsp;很特别请记住,它equals()是特殊的,因为整个collections&nbsp;API都依赖于它。此外集合API(在与它的名字一样“哈希”至少什么HashSet或HashTable)依靠之间的关系equals()和hashcode():该协议是当过equals()返回true两个对象从返回的值相同hashcode()。最重要的是,hashcode()在对象的生存期内,重新调整的值一定不能更改。您的实现有可能违反此规则,导致集合API zu失败,因为您的equals1()方法使用可变字段name。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java