1、当列表中保存的为字符串或者为数字型的,可以用:
Collections.sort(List<T>)
public static <T extends Comparable<? super T>> void sort(List<T> list)
此排序被保证是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。
指定列表必须是可修改的,但不必是大小可调整的。
该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n log(n) 性能。 此实现将指定列表转储到一个数组中,并对数组进行排序,在重置数组中相应位置处每个元素的列表上进行迭代。这避免了由于试图对适当位置上的链接列表进行排序而产生的 n2 log(n) 性能。
-
参数:
-
list
- 要排序的列表。
抛出:
-
ClassCastException
- 如果列表包含不 可相互比较的 的元素(例如,字符串和整数)。 -
UnsupportedOperationException
- 如果指定列表的列表迭代器不支持 set 操作。
2、当列表中保存的为自定义的javaBean,希望对对象列表按照某个属性进行升序、降序排序,可以用:
Collections.sort(List<T> list, Comparator<? super T> c)
此排序被保证是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。
排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n log(n) 性能。 指定列表必须是可修改的,但不必是可大小调整的。此实现将指定列表转储到一个数组中,并对数组进行排序,在重置数组中相应位置处每个元素的列表上进行迭代。这避免了由于试图对适当位置上的链接列表进行排序而产生的 n2 log(n) 性能。
-
参数:
-
list
- 要排序的列表。 -
c
- 确定列表顺序的比较器。 null 值指示应该使用的元素的 自然顺序。
抛出:
-
ClassCastException
- 如果列表中包含使用指定的比较器不 可相互比较的 的元素。 -
UnsupportedOperationException
- 如果指定列表的列表迭代器不支持 set 操作。
Comparator接口的实现:
package com.linkage.bi.powershow.util;
import java.util.Comparator;
import com.mongodb.BasicDBObject;
public class SortUtil implements Comparator<BasicDBObject> {
private final static int UP = 1; //升序
private final static int DOWM = -1; //降序
private int sortVal; //选择的排序方式
private String sortKey = ""; //按某字段进行排序
public SortUtil() {
}
public SortUtil(int sortVal, String sortKey) {
this.sortVal = sortVal;
this.sortKey = sortKey;
}
@Override
public int compare(BasicDBObject o1, BasicDBObject o2) {
if(sortVal == SortUtil.UP)
{
return sortUp(o1, o2);
}
else if(sortVal == SortUtil.DOWM)
{
return sortDown(o1, o2);
}
return 0;
}
//升序
private int sortUp(BasicDBObject o1, BasicDBObject o2) {
String val1 = o1.getString(sortKey);
String val2 = o2.getString(sortKey);
if (val1.compareTo(val2) < 0) {
return -1;
} else if (val1.compareTo(val2) > 0) {
return 1;
} else {
return 0;
}
}
//降序
private int sortDown(BasicDBObject o1, BasicDBObject o2) {
String val1 = o1.getString(sortKey);
String val2 = o2.getString(sortKey);
if (val1.compareTo(val2) > 0) {
return -1;
} else if (val1.compareTo(val2) < 0) {
return 1;
} else {
return 0;
}
}
}