java-object-sort

在java中,想要实现对象的排序,可以让对象实现Comparable借口,一直困扰我的是compareTo函数的含义。

1
2
int compareTo(Object O)
O − the Object to be compared.

从上面函数的意思可以看出,O的含义是被比较的对象。
假设我们现在要比较的类是:

1
2
3
4
5
class NodeMM
{
public int id;
public int year;
}

假设我们现在要实现的是对id从小到大排序,如果id相同,则年龄大的优先。
那么代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Node implements Comparable<Node>{
public int id;
public int year;
public Node(int id, int year) {
this.id = id;
this.year = year;
}
@Override
public String toString() {
return "Node{" +
"id=" + id +
", year=" + year +
'}';
}
@Override
public int compareTo(Node o) {
if (id > o.id) return 1;
else if (id == o.id){
if (year > o.year)
return 1;
else
return -1;
}
else return -1;
}
}

我来试着解释一下为啥么要这么写,大于小于和1,-1的关系是什么

  • 当我们想要对id从小到大排序时,我们比较的是前一个,也就是前面的都是有序的,当此时的id>O.id的时候,也就没有必要进行比较,直接return 0 即可。

  • 当我们想对year从大到小排序时,当year小于O.year的时候,才是满足题意的,也就是此时才return 1,而当year>O.year的时候,应该return -1,也就是需要调增位置。