将密钥插入地图后,您不得对其进行修改。
编辑:我在Map中找到了javadoc的摘录:
注意:如果将可变对象用作地图键,则必须格外小心。如果在对象是映射中的键的情况下以影响等值比较的方式更改对象的值,则不会指定映射的行为。
一个简单的包装器类的示例:
public static class MyWrapper { private int i; public MyWrapper(int i) { this.i = i; } public void setI(int i) { this.i = i; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; return i == ((MyWrapper) o).i; } @Override public int hashCode() { return i; }}和测试:
public static void main(String[] args) throws Exception { Map<MyWrapper, String> map = new HashMap<MyWrapper, String>(); MyWrapper wrapper = new MyWrapper(1); map.put(wrapper, "hello"); System.out.println(map.containsKey(wrapper)); wrapper.setI(2); System.out.println(map.containsKey(wrapper));}输出:
truefalse
注意:如果您不重写hashpre(),那么您只会得到true



