首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java排序集合

Java排序集合
EN

Stack Overflow用户
提问于 2018-06-20 04:41:12
回答 2查看 121关注 0票数 2

有没有人知道在我更新键属性的情况下,是否有可能保持一个TreeMap排序?

假设我的key是按属性'a‘排序的,而b是在equals()上使用的:

代码语言:javascript
复制
class Key implements Comparable<Key> {
   int a;
   int b;
   // compareTo, equals end hashcode here
}

当添加键/值对时,它们将在TreeMap中排序,但是,如果我更新其中一个键(属性a),我如何确保TreeMap会保持它们的排序?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-20 04:49:20

唯一安全的方法是删除项目,进行更改,然后重新添加。修改数据项中的键或散列代码会使基本一致性契约失效。

票数 7
EN

Stack Overflow用户

发布于 2018-06-20 04:54:39

如果你依赖于值语义,那就不是。一般情况下,如果映射的键发生了变化,就会发生异常。(TreeMap通常会以乱序结束,这可能会混淆密钥,如果lookups...and没有返回一致的值,而密钥是一个密钥,则HashMap可能会中断。)任何用作键的对象都应该是不可变的,或者至少不能被修改。

如果您想要更新一个键,最好删除映射,并将其重新插入到一个值已更改的新键下。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50936626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档