理解Collection的remove()方法:
直接上代码:
定义一个User类:
class User {
int id;
String name;
public User() {
}
public User(int id, String name) {
this.id = id;
this.name = name;
}
}
定义一个Cat类:
class Cat {
int age;
String type;
public Cat() {
}
public Cat(int age, String type) {
this.age = age;
this.type = type;
}
// 重写了equals()方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Cat cat = (Cat) o;
return age == cat.age && Objects.equals(type, cat.type);
}
}
测试程序:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Objects;
public class Test04 {
public static void main(String[] args) {
Collection c = new ArrayList();
User u1 = new User(1001, "张三");
c.add(u1);
System.out.println(c.size()); // 1
User u2 = new User(1001, "张三");
c.remove(u2);
System.out.println(c.size()); // 输出几? 答案是:1
// 清空c中元素,再测试一次
c.clear();
Cat c1 = new Cat(3, "波斯猫");
c.add(c1);
System.out.println(c.size()); // 1
Cat c2 = new Cat(3, "波斯猫");
c.remove(c2);
System.out.println(c.size()); // 输出几? 答案是:0
// 通样是调用remove()方法,为什么结果就不一样?
// 再仔细观察User类和Cat类,发现User类没有重写equals()方法,Cat类重写了equals()方法
// 同样也可以翻阅ArrayList的remove()的源代码,发现底层调用了equals()方法进行判断
// 结论:放在集合里面的元素,它的类一定要重写equals()方法。
}
}
结论:
remove(Object obj)方法是删除一个集合中的某一个指定对象。
remove()方法的源代码中调用了equals()方法进行判断是否相同,再删除。
所以存放在集合里的元素,它的类一定要重写equals()方法。
本文通过代码示例解析Java中Collection的remove()方法的工作原理。重点指出该方法依赖于对象的equals()方法来判断并移除指定元素,因此存储在集合中的元素类必须重写equals()方法。

646

被折叠的 条评论
为什么被折叠?



