java集合排序问题

标签 java collections compare

我使用简单的比较器并得到异常,但不知道该怎么办

这就是我的称呼:

try {
   Collections.sort(this.closePositions, new PositionComperator());
}
catch(Exception e) {
   e.printStackTrace();
}

这是比较器:

  public class PositionComperator implements Comparator<DataResponse> {

    @Override
    public int compare( DataResponse pos1, DataResponse pos2) {

        if (pos1.openTime >= pos2.openTime) {
            return 1;
        } 
        else {
            return -1;
        }// returning 0 would merge keys

    }

   }

这是异常(exception):

java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeLo(Unknown Source)
at java.util.TimSort.mergeAt(Unknown Source)
at java.util.TimSort.mergeCollapse(Unknown Source)
at java.util.TimSort.sort(Unknown Source)
at java.util.TimSort.sort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at java.util.Collections.sort(Unknown Source)
at GTTask.RefreshIdentityHistory.call(RefreshIdentityHistory.java:59)
at GTTask.RefreshIdentityHistory.call(RefreshIdentityHistory.java:1)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

最佳答案

如果两个值xy具有相同的openTime,则compare(x, y)compare(y, x) 都会返回 1,这违反了 compare 的约定:

The implementor must ensure that sgn(compare(x, y)) == -sgn(compare(y, x)) for all x and y.

你还没有确保这一点。

您需要考虑当 openTime 值相同时您想要发生什么 - 要么返回 0,要么对哪个值应该出现在其他。例如,您是否可以进行一些二次比较?

关于java集合排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17964963/

相关文章:

java - HashTable传值是Interface?

java - Struts2:更新 Map 中 "List Of Objects"的值

string - Go - 比较用户输入的字符串/字节 slice

java - 分别比较两个数组元素的和

java - Spring 连接的 EhCache 磁盘存储在多线程应用程序中创建冲突

java - 我对如何将 "ranks"添加到我的 DeckOfCards 实验室感到困惑

java - Akka 消息中的发送行为

java - 如何使用泛型将这两种方法合二为一?

c# - 用另一个哈希表更新哈希表?

linux - Bash目录内容之间的递归相似性