Java中Collections.Sort()的问题

Java中Collections.Sort()的问题,java,compare,Java,Compare,我已经用谷歌搜索了这个问题,但似乎每个人都有其他问题。也许有人能帮我: 我总是在某个(随机)点收到此错误消息: 这是我的比较方法: @Override public int compareTo(Entity entity) { return (int)(entity.y - y); } 提前谢谢你 最有可能的情况是,您得到的是溢出/下溢,这导致了一个并不总是如预期的那样的比较。i、 e.如果实体.y和y>>之间的差异=231,则它将溢出,并具有与其应该具有的符号相反的符号。我建议你用

我已经用谷歌搜索了这个问题,但似乎每个人都有其他问题。也许有人能帮我:

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

这是我的比较方法:

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

提前谢谢你

最有可能的情况是,您得到的是溢出/下溢,这导致了一个并不总是如预期的那样的比较。i、 e.如果
实体.y
y
>>之间的差异=231,则它将溢出,并具有与其应该具有的符号相反的符号。我建议你用

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

public int compareTo(实体){
返回实体y>y±1:entity.y
最有可能的情况是,您得到的是溢出/下溢,导致的比较并不总是如预期的那样。i、 e.如果
实体.y
y
>>之间的差异=231,则它将溢出,并具有与其应该具有的符号相反的符号。我建议你用

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

public int compareTo(实体){
返回实体y>y±1:entity.y
我认为@AndrewTobilko可能找到了正确的答案。将
int
转换为
int非常可能是使您的
方法进行比较变得不可传递的原因。我认为@AndrewTobilko可能找到了正确的答案。将
int
转换为
int非常可能是使您的
方法相比不可传递的原因。
public int compareTo(Entity entity) {
    return entity.y > y ? +1 : entity.y < y ? -1 : 0;
}