use*_*842 0 java collections scjp hashmap
import java.util.*;
class U {
int x;
U(int x) {
this.x = x;
}
}
public class G {
public U a = new U(22);
public U b = new U(23);
Integer y = 22;
Integer r = 23;
void a() {
Map<U, Integer> set = new HashMap<U, Integer>();
set.put(a, y);
set.put(a, r);
set.put(b, y);
System.out.print(set.size() + " ");
}
public static void main(String[] args) {
G m = new G();
m.a();
}
}
Run Code Online (Sandbox Code Playgroud)
我总是对地图和列表感到困惑.我知道当map将密钥放入集合时,它会调用hashcode,如果存储桶相同,则调用equal方法.但是,我了解到,如果类重写这两个方法,则不会存储重复的键.例如包装类:String实现自己的hashcode和equal方法.此外,如果您不这样做,则会调用唯一的哈希码,并且重复的密钥将存储在集合中.
但是在上面的例子中,类U没有实现hashcode和equal方法.但是,Map不允许重复键.
我检查了SIZE:它的2应该是3,因为我的U类没有实现hashcode也没有.
请清除我
提前致谢
HashMap 不允许重复的密钥,
如果你没有从超类中提供hashcode()和equals()实现它extends(对于你的情况而言java.lang.Object),并且该实现为同一个对象提供相同的哈希码并equals()在同一个对象返回true
public boolean equals(Object obj) {
return (this == obj);
}
Run Code Online (Sandbox Code Playgroud)
同样
| 归档时间: |
|
| 查看次数: |
331 次 |
| 最近记录: |