Comparable和 Comparator的区别
程序员文章站
2022-05-22 14:03:47
...
简介
Comparable和 Comparator都是java.util包下的两个接口
Comparable在类内使用
Comparator单独使用
1、Comparable
## 描述
Comparable是一个接口,通过类继承该接口,重写compareTo方法的实现比较,
compareTo的返回值为int,有三种情况:
- Other > this: return 正整数
- Other = this:return 0
- Other < this: return 负整数
例如:
compareTo方法的重写:
@Override
public int compareTo(Person o) {
// TODO Auto-generated method stub
//比较名字长度,优先
int num = this.name.length() - o.name.length();
//比较年龄
int num1 = num==0?this.age - o.age:num;
return num1;
}
test类
List<Person> list = new ArrayList<>();
Person person;
for(int i=0;i<30;i++) {
person = new Person("person"+i, 10-i);
list.add(person);
}
//打乱顺序,测试sort
Collections.shuffle(list);
Collections.sort(list);
for(Person ps:list) {
System.out.println(ps);
}
输出:
2、Comparator
描述
Comparator独立的比较器,当设计类时,没有考虑到比较器,后面想使用时,可以定义。
例如:
Comparator比较器,继承于接口java.util.Comparator
public class Comparator implements java.util.Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
// TODO Auto-generated method stub
int num = o1.getName().length() - o2.getName().length();
int num1 = num==0?o1.getAge() - o2.getAge():num;
return num1;
}
}
测试:
List<Person> list = new ArrayList<>();
Person person;
for (int i = 0; i< 30; i++) {
person = new Person("person"+i, 30-i);
list.add(person);
}
Collections.sort(list, new Comparator());
for(Person ps:list) {
System.out.println(ps);
}
输出:
3、Collections工具类
Collections提供以下方法对List进行操作
void reverse(List list):反转
void shuffle(List list),随机排序
void sort(List list),按自然排序的升序排序
void sort(List list, Comparator c);定制排序,由Comparator控制排序逻辑
void swap(List list, int i , int j),交换两个索引位置的元素
void rotate(List list, int distance),旋转。当distance为正数时,将list后distance个元素整体移到前面。当distance为负数时,将 list的前distance个元素整体移到后面。