对一个列表进行自定义排序时出现的错误:
Collections.sort(roomList, new Comparator<Room>() {
@Override
public int compare(Room r1, Room r2) {
if(r1.getNum() > r2.getNum())
return 1;
return -1;
}
});
按教室人数升序排列,本来想的是如果前面的比后面的人数多就返回1交换位置,否则返回-1,但是运行崩溃了,查了资料发现是jdk7开始Collections.sort方法底层排序算法换了,导致在两个比较对象相等的时候需要返回0,所以应该这样写:
Collections.sort(roomList, new Comparator<Room>() {
@Override
public int compare(Room r1, Room r2) {
if(r1.getNum() > r2.getNum())
return 1;
else if(r1.getNum() < r2.getNum())
return -1;
else
return 0;
}
});
其实整型数据有直接比较的方法,所以直接这样子写就行了…
Collections.sort(roomList, new Comparator<Room>() {
@Override
public int compare(Room r1, Room r2) {
return Integer.compare(r1.getNum(), r2.getNum());
}
});