如果想要自定义排序如降序,则重新实现的sort()方法中的比较器。
自定义排序方法要实现或重写comparator比较器。
关键技术点是
import java.util.Comparator;
class MyIntComparator implements Comparator{
public int compare(Object o1, Object o2) {
int i1 = ((Integer)o1).intValue();
int i2 = ((Integer)o2).intValue();
if (i1 < i2){
return 1;
}
if (i1 > i2){
return -1;
}
return 0;
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class SortList {
public static void output(List list){
if (list == null){
return;
}
for (int i=0; i<list.size(); i++){
System.out.print(list.get(i).toString() + " ");
}
System.out.println();
}
public static void main(String[] args) {
List list = new ArrayList();
list.add(new Integer(5));
list.add(new Integer(8));
list.add(new Integer(1));
list.add(new Integer(3));
list.add(new Integer(2));
list.add(new Double(3.1));
System.out.println("list开始状态");
SortList.output(list);
//Collections.sort方法将用默认比较器排列list的元素
Collections.sort(list);
System.out.println("list被默认比较器排序后的状态");
SortList.output(list);
//下面将list的元素按降序排列
Collections.sort(list, new MyIntComparator());
System.out.println("list被自定义比较器排序后的状态");
SortList.output(list);
//因此,对于任意自定义类的对象,当保存在集合类容器中后,如果需要对它们进行排序,
//需要自己提供适应于自定义类的比较器,自定义比较器必须实现Comparator接口。
//然后采用Collections.sort(list, comparator);方法对容器进行排序。
}
}
对list<泛型>自定义排序:
(1)例如 list<user> 对该list中user对象的age进行降序,实现方法有:
user类中实现Comparable接口然后重写compareTo()方法
@Override
public int compareTo(A a) {
return this.age.compareTo(a.getAge()); (默认升序)
/* 降序重写比较器
if(this.age> a.getAge()) {
return -1;
}else{
return 1;
} */
使用自定义排序:Collection.sort(list)
(2)如果user类中没有实现Comparable接口,根据Collections.sort重载方法实现
Collections.sort(listB, new Comparable<B>()) {
@Override
public int compare(B b1, B b2) {
return b1.getOrder().compareTo(b2.getOrder);(默认升序)
/** 自定义降序
if(b1.getAge> b2.getAge()) {
return -1;
}else{
return 1;
**/
}
};
自己总结可能有不对的地方,还望指正