前言
如果ArraylIst中存放的不是整型等基本类型,而存放的是自定义类这样的引用类型,我们应该如何对其进行排序呢?(emmm这玩意儿在python中edge_lst = sorted(edge_lst, key=lambda x: x.weight)
一句话就解决了…吐血1今天找小姐姐说话,没发挥好,吐血2)
这里的排序使用的是Collections这个工具类的sort静态方法,也就是说不需要对Collections进行实例化,就可以使用。
方法一:自定义类实现Comparable接口,并重写compareTo方法
这里采用的是:public static <T> void sort(List<T> list)
举例说明:
class Edge implements Comparable<Edge>{
public int start;
public int end;
public double weight;
public Edge(int start, int end, double weight) {
this.start = start;
this.end = end;
this.weight = weight;
}
@Override
public int compareTo(Edge o) {
return (int)(this.weight - o.weight);
}
}
Collections.sort(arr_lst); // 这里的arr_lst是ArrayList<Edge>对象
方法二:实现Comparator接口,该对象作为Collections.sort的第二个参数
这里采用的是public static <T> void sort(List<T> list,Comparator<? super T>
举例说明
Collections.sort(arr_lst, new Comparator<Edge>() {
@Override
public int compare(Edge o1, Edge o2) {
return (int)(o1.weight-o2.weight);
}
});
啊,还有这种方法,暂时不知道其原理。。
arr_lst.sort((Edge o1, Edge o2) -> (int) (o1.weight - o2.weight));