【发布时间】:2011-06-25 14:00:28
【问题描述】:
我对所有“如果 c 对 S 施加的排序与 equals 不一致,排序集(或排序映射)将表现得很奇怪”有点困惑。 Javadoc 中的警告。 我什至不确定 PriorityQueue 是我需要的...
我的情况是这样的: 我有一个带有整数时间戳和其他一些字段的类 Event。 我正在寻找一种数据结构,我可以在其中插入这些事件并按时间戳对事件进行排序。 不同的事件可以有相同的时间戳,所以 - 如果我理解正确的话 - compareTo 和 equals 会不一致。
我的第一个方法是让 Event 实现 Comparable 并像这样提供 compareTo: 公共 int compareTo(事件 e){ 返回 this.timestamp - e.getTimestamp(); }
我不明白我应该如何解决这个问题。我考虑过创建一个自定义比较器,但是在比较器的 javadoc 中也会弹出关于奇怪行为的相同警告。 我不想插入多个相等的事件实例,我只想让它们按时间戳排序。
提前感谢您的帮助:)
编辑:
我只希望事件按时间戳排序。很可能,两个不同的事件具有相同的时间戳。所以 compareTo 将返回 0,因为它们具有相同的时间戳并且在排序时是相等的。但是 equals() 不会返回 true,因为它们是不同的事件。
我不确定,使用 PriorityQueue 是否正确。我查看了 SortedSet,但它对 compareTo 和 equals 的一致性有相同的警告。
也许我从错误的角度解决这个问题,我不知道......
【问题讨论】:
-
你能覆盖equals吗?
-
@Yet Another Geek:是的,我可以。