我有一个作为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 回答
![?](http://img1.sycdn.imooc.com/545865b000016a9202200220-100-100.jpg)
jeck猫
TA贡献1909条经验 获得超7个赞
equals()
很特别
请记住,它equals()
是特殊的,因为整个collections API都依赖于它。
此外集合API(在与它的名字一样“哈希”至少什么HashSet
或HashTable
)依靠之间的关系equals()
和hashcode()
:该协议是当过equals()
返回true
两个对象从返回的值相同hashcode()
。最重要的是,hashcode()
在对象的生存期内,重新调整的值一定不能更改。
您的实现有可能违反此规则,导致集合API zu失败,因为您的equals1()
方法使用可变字段name
。
添加回答
举报
0/150
提交
取消