Java Collections.sort() 方法
2018-10-30 本文已影响0人
浅陌_45f3
查看这个方法时借鉴了Java中Collections.sort()排序详解 - 薛瑄的博客 - CSDN博客 和 Collections.sort()用法简单介绍 - WHqingwei - 博客园 这个两个博客,下面说说自己的见解。
Collection.sort() 方法是按照某一顺序对给定的集合进行排序,那么主要要掌握的就是如何用这个方法对集合进行排序。实现这个方法有两种方式:
(一)public static <T extends Comparable<? super T>> void sort(List<T> list); 当sort() 方法中只有一个参数,但是这个集合必须实现一个 Comparable 接口。
public class Test1 {
static class A implements Comparable<A>{
private String name;
private Integer order;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
public String toString(){
return "name: " + name + " order: " + order;
}
@Override
public int compareTo(A a) {
return this.order.compareTo(getOrder());
}
}
public static void main(String[] args) {
List<A> listA = new ArrayList<A>();
A a1 = new A();
a1.setName("a1");
a1.setOrder(1);
A a2 = new A();
a2.setName("a2");
a2.setOrder(2);
listA.add(a1);
listA.add(a2);
//listA 实现 Comparable<A> 的接口,所以可以调用 Collections.sort(List<T>);
Collections.sort(listA);
System.out.println(listA);
}
}
看薛瑄的博客中的例子中 Book 实现了 Comparable,而不是 Comparable<Book> ,注解中说不可以用 sort(List<T> list); 这个方法,但我在自己试验时发现只要是实现了 Comparable 接口,就可以用这个方法进行排序,只是会有警告。
(二)public static <T> void sort(List<T> list, Comparator<? super T> c); list 是要进行排序的集合;c 是比较器,实现 Comparator 接口,返回一个 int 值,通过这个值告诉 sort(); 方法按什么排序。
public class Test3 {
static class C {
private String name;
private Integer order;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
public String toString(){
return "name: " + name + ", order: " + order;
}
}
public static void main(String[] args) {
List<C> c = new ArrayList<C>();
C c1 = new C();
c1.setName("c1");
c1.setOrder(1);
C c2 = new C();
c2.setName("c2");
c2.setOrder(2);
c.add(c1);
c.add(c2);
Collections.sort(c, new Comparator<C>(){
@Override
public int compare(C c1, C c2) {
return c1.getOrder().compareTo(c2.getOrder());
}
});
System.out.println(c);
}
}