1、当列表中保存的为字符串或者为数字型的,可以用:
Collections.sort(List<T>)
public static <T extends Comparable<? super T>> void sort(List<T> list)
e1 和 e2 元素,e1.compareTo(e2) 不得抛出 ClassCastException)。
此排序被保证是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。
指定列表必须是可修改的,但不必是大小可调整的。
该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n log(n) 性能。 此实现将指定列表转储到一个数组中,并对数组进行排序,在重置数组中相应位置处每个元素的列表上进行迭代。这避免了由于试图对适当位置上的链接列表进行排序而产生的 n2 log(n) 性能。
- 参数:
list
- 要排序的列表。- 抛出:
ClassCastException
- 如果列表包含不可相互比较的 的元素(例如,字符串和整数)。UnsupportedOperationException
- 如果指定列表的列表迭代器不支持
set 操作。
2、当列表中保存的为自定义的javaBean,希望对对象列表按照某个属性进行升序、降序排序,可以用:
Collections.sort(List<T> list,
Comparator<? super T> c)
e2 元素,c.compare(e1, e2) 不得抛出 ClassCastException)。
此排序被保证是稳定的:不会因调用 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; } } }