1,概要说明:
Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。
Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。
2,使用说明:
1)implements Comparable<Student> 重写public int compareTo(Student o)方法
@Override
public int compareTo(Student o) {
return this.id - o.id ; //调用Arrays.sort() 默认排序Id 从小到大排序
}
public int compareTo(Student o) {
return o.id - this.id ; //调用Arrays.sort() 默认排序Id 从大到小排序
}
详见:https://www.jianshu.com/p/b90ff410af62
2)implements Comparator<Student> 重写public int compare(Student o1, Student o2) 方法
升序
if(o1.id>o2.id)
return 1;
else if(o1.id<o2.id)
return -1;
else
return 0;
//降序
if(o1.id>o2.id)
return -1;
else if(o1.id<o2.id)
return 1;
else
return 0;
名字升序,--对象属性为字符串时,通过compareTo比较,具备字符串的所有属性
if(o1.name.compareTo(o2.name)>0)
return 1;
else if(o1.name.compareTo(o2.name)<0)
return -1;
else
return 0;
详见:https://blog.csdn.net/Hello_Peter_Chan/article/details/84246978
3,排序原理(二叉树排序算法)
拿出一个作为根节点,再拿出元素先从根节点比较,如果小于根节点,左子树为空,则为根节点左子树;如果大于根节点,右子树为空,则为右子树。(如果比较中左右子树不为空,再与左子树或者右子树比较,一直递归)最后对二叉树进行中序遍历。
4,Arrays.sort和Collections.sort实现自定义排序时基本相同,分为两种:
1)被排序的元素自身实现了Comparable接口
2)被排序的元素没有实现Comparable接口,自定义比较器Comparator类作为输入参数输入
-- class compareToo构造器类
Arrays.sort(stu,new compareToo());
Collections.sort(list,new compareToo());
区别:
Collection.sort是给List<T>进行排序,而Arrays.sort是给数组进行排序。
详见:https://www.jianshu.com/p/53cc95a4eea7