繁体   English   中英

Java中的Collections.Sort()问题

[英]Problems with Collections.Sort() in Java

我已经用谷歌搜索了这个问题,但似乎每个人都有另一个问题。 也许有人可以帮助我:

我总是在某个(随机)点收到此错误消息:

Exception in thread "LWJGL Application" java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.ComparableTimSort.mergeLo(ComparableTimSort.java:740)
at java.util.ComparableTimSort.mergeAt(ComparableTimSort.java:477)
at java.util.ComparableTimSort.mergeCollapse(ComparableTimSort.java:402)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:209)
at java.util.Arrays.sort(Arrays.java:1312)
at java.util.Arrays.sort(Arrays.java:1506)
at java.util.ArrayList.sort(ArrayList.java:1454)
at java.util.Collections.sort(Collections.java:141)
at com.mygdx.game.GdxGame.render(GdxGame.java:187)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:223)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124)

这是我的比较方法:

@Override
public int compareTo(Entity entity) {
    return (int)(entity.y - y);
}

先感谢您!

您很可能会遇到上溢/下溢的情况,导致进行的比较并不总是符合预期。 即,如果entity.yy之间的差> = 2 31它将溢出,并具有与应有的符号相反的符号。 我建议你用

public int compareTo(Entity entity) {
    return Long.compare(entity.y, y);
}

要么

public int compareTo(Entity entity) {
    return entity.y > y ? +1 : entity.y < y ? -1 : 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM