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