当语句return s1.age > s2.age ? 1 : -1;的返回值为1时,也就是说 s1的值大于s2的值时 ,compareTo是按照升序(由小到大)排序的!
当返回值为-1时,也就是说 s1的值小于s2的值时 ,compareTo是按照降序(由大到小)排序的!
当返回值为0时,s1等于s2的值,如果数值全部相等则排序也同样按照初始顺序排列。
例子:
//类中的私有变量>形参 返回1 为从小到大
public int compareTo(Student s) {
if(this.score>s.getScore()){
return 1; //正整数是大于
}else if(this.score<s.getScore()){
return -1;//负整数是小于
}else{
return 0; //0为等于
}
}
Queue<int[]> queue=new PriorityQueue<>(new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0]==o2[0]?o2[1]-o1[1]:o2[0]-o1[0];
}
});
// 注意Lambda中,参数为数组时可以这样写
Queue<int[]> queue=new PriorityQueue<>((o1, o2) -> o1[0]==o2[0]?o2[1]-o1[1]:o2[0]-o1[0]);
Queue<int[]> queue=new PriorityQueue<>((o1, o2) -> o1[0]==o2[0]?o2[1]-o1[1]:o1[0]-o2[0]);
queue.add(new int[]{0,2});
queue.add(new int[]{0,-1});
queue.add(new int[]{0,3});
queue.add(new int[]{1,2});
queue.add(new int[]{1,-1});
queue.add(new int[]{2,3});
System.out.println(queue.size());
while(queue.size()!=0)
System.out.println(Arrays.toString(queue.poll()));
res: [0, 3] [0, 2] [0, -1] [1, 2] [1, -1] [2, 3]
o1[0]-o2[0] 前减去后按照从小到大排序
o2[1]-o1[1] 后减去前按照从大到小排序