Java进阶-contains 源码分析

存放在一个集合中的类型,一定要重写 equals 方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import java.util.ArrayList;
import java.util.Collection;

public class CollectionTest04 {

public static void main(String[] args) {
// 创建集合对象
Collection c = new ArrayList();
// 创建用户对象
User u1 = new User("Jack");
// 加入集合
c.add(u1);

// 判断集合中是否包含u2
User u2 = new User("Jack");
// 没有重写 equals之前,这个结果是 false
// System.out.println(c.contains(u2)); // false
// 重写 equals 方法后,比较的是 name
System.out.println(c.contains(u2)); // true

Integer x = new Integer(100);
c.add(x);

Integer y = new Integer(100);
System.out.println(c.contains(y)); // true
}

}

class User {
private String name;

public User() {
}

public User(String name) {
this.name = name;
}

// 重写 equals 方法
// 将来调用 equals 方法的时候,一定是调用这个重写的 equals 方法
public boolean equals(Object o) {
if (o == null || !(o instanceof User))
return false;
if (o == this)
return true;
User u = (User) o;
// 如果名字一样表示同一个人,不再比较对象的内存地址,比较内容
return u.name.equals(this.name);
}
}