有没有人知道在我更新键属性的情况下,是否有可能保持一个TreeMap排序?
假设我的key是按属性'a‘排序的,而b是在equals()上使用的:
class Key implements Comparable<Key> {
int a;
int b;
// compareTo, equals end hashcode here
}
当添加键/值对时,它们将在TreeMap中排序,但是,如果我更新其中一个键(属性a),我如何确保TreeMap会保持它们的排序?
发布于 2018-06-20 04:49:20
唯一安全的方法是删除项目,进行更改,然后重新添加。修改数据项中的键或散列代码会使基本一致性契约失效。
发布于 2018-06-20 04:54:39
如果你依赖于值语义,那就不是。一般情况下,如果映射的键发生了变化,就会发生异常。(TreeMap
通常会以乱序结束,这可能会混淆密钥,如果lookups...and没有返回一致的值,而密钥是一个密钥,则HashMap
可能会中断。)任何用作键的对象都应该是不可变的,或者至少不能被修改。
如果您想要更新一个键,最好删除映射,并将其重新插入到一个值已更改的新键下。
https://stackoverflow.com/questions/50936626
复制相似问题