谈一谈java中对象的排序

来源:互联网 发布:怎样在电脑上开淘宝店 编辑:程序博客网 时间:2024/06/04 18:39

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

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

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

 class Node {        public int id;        public int year; }

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

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,也就是需要调增位置。

原创粉丝点击