码:
public class Puzzle23{
void Puzzle23(){
map1.put(String1, "1");
map1.put(String2, "2");
}
private final NewMap map1 = new NewMap();
private static final String String1 = new String("J2eeSig");
private static final String String2 = new String("J2eeSig");
public static void main(final String args[]){
final Puzzle23 p22 = new Puzzle23();
final Map<String, String> map2 = new HashMap();
map2.put(String1, "1");
map2.put(String2, "2");
System.out.println(p22.map1.size() == map2.size() ? true : false);
p22.map1.remove(new String(String1));
map2.remove(new String(String2));
System.out.println(p22.map1.size() == map2.size() ? true : false);
}
class NewMap extends IdentityHashMap<String, String>{
public void put(final String... values){
super.put(values[0], values[1]);
}
public int size(){
return super.size() + 1 - 1 / 1 * 1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
实际结果:-
false
true
Run Code Online (Sandbox Code Playgroud)
预期结果:-
true
true
Run Code Online (Sandbox Code Playgroud)
为什么???
这是因为使用NewMap是IdentityHashMap.检查文档在哪里说
这个类不是通用的Map实现!虽然这个类实现了Map接口,但它故意违反了Map的一般契约,它要求在比较对象时使用equals方法.此类仅用于需要引用相等语义的罕见情况.
编辑:
无论如何我在你的代码中发现了一个错误.void Puzzle23()不是构造函数,它是一种方法.必须定义构造函数而不返回值(例如Puzzle23()).所以你永远不会填补map1.当你解决这个问题时,你会发现你的输出是false false因为IdentityHashMap.切换map1到HashMap输出时将true true如您所愿.无论如何检查文件IdentityHashMap.
| 归档时间: |
|
| 查看次数: |
244 次 |
| 最近记录: |