Un petit truc que je ne comprends pas :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
static public final class A
{
	private int n;
 
 
	@Override
	public boolean equals(Object o)
	{
		if (this == o) return true;
		if (o == null || getClass() != o.getClass()) return false;
		A a = (A) o;
		return Math.abs(n - a.n) < 2;
	}
 
 
	@Override
	public int hashCode()
	{
		return n;
	}
 
 
	public A(int n)
	{
		this.n = n;
	}
}
 
HashMap<A, Boolean> m = new HashMap<>();
ArrayList<A> l = new ArrayList<>();
A a1 = new A(0);
A a2 = new A(1);
m.put(a1, false);
l.add(a1);
System.out.println(a1.equals(a2)); // true OK
System.out.println(m.containsKey(a2)); // false ???
System.out.println(l.contains(a2)); // true OK
for (A i : m.keySet()) trace(i.equals(a2)); // true OK
for (A i : l) trace(i.equals(a2)); // true OK
Pourquoi HashMap::containsKey() me renvoie false