假设我在地图中放入了一个条目,其中包含一个对象作为键:
treeNode.put(someObject,someValue);
然后一段时间后,我得到该条目,并更改对象,以便现在如果重新使用它,它会落在地图中的其他位置。
treeNode.get(someObject);
someObject.change();
我是否必须删除地图中的旧条目,然后重新放置才能使地图与新密钥保持一致?
是的,你知道。
TreeMap
不可能知道某个值在地图中的位置应该发生变化。
TreeMap
没有用那么多话表达这一点,但 Map
指定了
如果对象的值以影响比较的方式更改,而该对象是映射中的键,则未指定映射的行为。
和
equals
记录它使用指定的比较器而不是
TreeMap
。中的元素按照其自然顺序或构造时提供的
TreeMap
存储。映射根据其键的自然顺序进行排序,或者通过映射创建时提供的比较器进行排序,具体取决于使用的构造函数。
此行为仅在将元素
添加到地图时适用。当修改条目的键时,Comparator
类不会执行任何重新排列
TreeMap
和
compareTo
方法的定义方式) .
之所以如此,是因为 Map 接口是根据 equals 操作定义的,但是有序映射使用其compareTo(或compare)方法执行所有键比较,因此从以下角度来看,通过此方法视为相等的两个键是排序后的地图,相等。