更改用作Map键的对象

blu*_*llu 2 java map

设V是一个具有名为K的单个属性及其getter和setter的类.

如果我这样做会发生什么:

V v = new V();
v.setK("a");
HashMap<K,V> map = new HashMap<K,V>();
map.put(v.getk(),v);
v.setK("b");
Run Code Online (Sandbox Code Playgroud)

据我所知,这应该会导致某种问题,因为地图键应该是不变的.这会发生什么?

编辑:考虑键不是字符串而是可变对象,如下面的文章中所述.

Vad*_*rev 5

从"Map"界面JavaDoc引用:

如果将可变对象用作映射键,则必须非常小心.如果在对象是地图中的键的情况下以影响等于比较的方式更改对象的值,则不指定映射的行为.

你根本不应该改变键(以改变它们的"hashCode"/"equals"的方式).如果你尝试,你肯定会有很长很糟糕的调试.

就像你在图书馆交换书籍一样.指数变得不可靠.你搜索"Bradbury",但找到"Simak".