Comparator | Comparable | |
---|---|---|
位置 | java.util | java.lang |
使用 | 在类外实现接口 | 在类内实现接口 |
重写方法 | int compareTo(T o) | int compare(T o1, T o2) |
排序方法 | Collections.sort(List list) | Collections.sort(List list, Comparator<? super T> c) |
Comparator 用法示例:
public class ComparatorSortTest
{
public static void main(String[] args)
{
List<Pearson> pearsonList = new ArrayList<>();
pearsonList.add(new Pearson(10, "zhangsan"));
pearsonList.add(new Pearson(30, "lisi"));
pearsonList.add(new Pearson(21, "wangwu"));
pearsonList.add(new Pearson(15, "zhaoliu"));
// 按照年龄,升序排列
Collections.sort(pearsonList, new Comparator<Pearson>()
{
@Override
public int compare(Pearson o1, Pearson o2)
{
return o1.age - o2.age;
}
});
// 输出:[Pearson{age=10, name='zhangsan'}, Pearson{age=15, name='zhaoliu'}, Pearson{age=21, name='wangwu'}, Pearson{age=30, name='lisi'}]
System.out.println(pearsonList.toString());
// 按照名字,倒序排列
Collections.sort(pearsonList, new Comparator<Pearson>()
{
@Override
public int compare(Pearson o1, Pearson o2)
{
// String类实现了Comparable接口
return o2.name.compareTo(o1.name);
}
});
// 输出:[Pearson{age=15, name='zhaoliu'}, Pearson{age=10, name='zhangsan'}, Pearson{age=21, name='wangwu'}, Pearson{age=30, name='lisi'}]
System.out.println(pearsonList.toString());
}
}
class Pearson
{
public int age;
public String name;
public Pearson(int age, String name)
{
this.age = age;
this.name = name;
}
@Override
public String toString()
{
return "Pearson{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
Comparator 用法示例:
public class ComparableSortTest
{
public static void main(String[] args)
{
List<PearsonB> pearsonList = new ArrayList<>();
pearsonList.add(new PearsonB(10, "zhangsan"));
pearsonList.add(new PearsonB(30, "lisi"));
pearsonList.add(new PearsonB(21, "wangwu"));
pearsonList.add(new PearsonB(15, "zhaoliu"));
// 按年纪,升序排列
Collections.sort(pearsonList);
// 输出:[Pearson{age=10, name='zhangsan'}, Pearson{age=15, name='zhaoliu'}, Pearson{age=21, name='wangwu'}, Pearson{age=30, name='lisi'}]
System.out.println(pearsonList.toString());
}
}
class PearsonB implements Comparable<PearsonB>
{
public int age;
public String name;
public PearsonB(int age, String name)
{
this.age = age;
this.name = name;
}
/**
* 注意:此类具有与 equals 不一致的自然排序
* 改动不方便
*/
@Override
public int compareTo(PearsonB o)
{
return this.age - o.age;
}
@Override
public String toString()
{
return "Pearson{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}