一、Comparator是什么?
- Comparator 是 java 中的接口,位于java.util包下。
- Comparator 这个接口代表一个比较器,具有可比性。
1.1 什么时候用Comparator ?
- 排序 : 比较两个对象谁前谁后
- 分组 : 比较两个对象是否属于同一组
1.2 实例
- 例子:
public class Test1(){
//main方法
public static void main(String[] args) {
//设置一个泛型
List <Integer> list = new LinkedList<Integer>();
//赋一些值当作例子
//使用add();方法给集合添加值
list.add(11);
// list.addAll("张三"); 报错,因为你设置的是 Integer类型
list.add(5);
list.add(9);
list.add(9);
}
}
- 第一种排序 :使用 .sort() 方法
public class Test1{
public static void main(String[] args) {
//例子排序之前输入的值为:11、5、9、9
list.sort(new Comparator<Integer>() {
@Override
public int compare(Integer arg0, Integer arg1) {
// TODO Auto-generated method stub
return arg0-arg1;//升序
//return arg1-arg0;//降序
}
});
}
}
- 第二种排序方法 : 使用 Collections 工具类
Collections.sort(list);
//.sort(list) 默认是升序
System.out.println(list);
- 第三种排序方法 : 使用 Collections 工具类
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer arg0, Integer arg1) {
// TODO Auto-generated method stub
return arg1 - arg0 ;//降序
}
});
System.out.println(list);
- 第四种排序方法 : 使用 Collections 工具类
/**
* 自定义比较器
* 1.实现 Comparator 接口
* 2.导包 import java.util.Comparator;
* 3.重写抽象方法
*/
public class MyComparator implements Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
/**
* o1-o2 升序
* o2-o1 降序
*/
return o1-o2;
}
}
之后在调用这个方法
MyComparator m1 = new MyComparator();
Collections.sort(list, m1);
System.out.println(list);
1.3 关于HashSet与TreeSet的排序方法
//使用toArray将值转换为数组
Object [] array = set.toArray();
//之后调用.sort方法
Arrays.sort(array);
//通过加强版for循环进行排序
for(Object o : array) {
//默认为升序
System.out.println(o);
}