英文原文链接:http://www.programcreek.com/2014/03/how-developers-sort-in-java/
当阅读代码量很大的的Java开源代码时,我发现Java程序员经常使用两种方式实现排序算法。
1.使用Collections类或者Arrays类的sort()方法;
2.使用排序的数据结构,比如:TreeMap类和TreeSet.类。
下面就通过代码演示两种排序的实现。
使用sort()方法
如果需要排序的是集合,那么就需要Collections.sort()方法。
// Collections.sort
List<ObjectName> list = new ArrayList<ObjectName>();
Collections.sort(list, new Comparator<ObjectName>() {
public int compare(ObjectName o1, ObjectName o2) {
return o1.toString().compareTo(o2.toString());
}
});
如果需要排序的是数列,那么就需要Arrays.sort()方法。
// Arrays.sort
ObjectName[] arr = new ObjectName[10];
Arrays.sort(arr, new Comparator<ObjectName>() {
public int compare(ObjectName o1, ObjectName o2) {
return o1.toString().compareTo(o2.toString());
}
});
这种方式对于数据或集合是已经完全生成的对象,是非常方便的。
使用排序结构
如果是list或者是set,那么就用TreeSet类进行排序。
// TreeSet
Set<ObjectName> sortedSet = new TreeSet<ObjectName>(new Comparator<ObjectName>() {
public int compare(ObjectName o1, ObjectName o2) {
return o1.toString().compareTo(o2.toString());
}
});
sortedSet.addAll(unsortedSet);
如果是map,就用TreeMap来排序,TreeMap将用key来进行排序。
// TreeMap - using String.CASE_INSENSITIVE_ORDER which is a Comparator that orders Strings by compareToIgnoreCase
Map<String, Integer> sortedMap = new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER);
sortedMap.putAll(unsortedMap);
//TreeMap - In general, defined comparator
Map<ObjectName, String> sortedMap = new TreeMap<ObjectName, String>(new Comparator<ObjectName>() {
public int compare(ObjectName o1, ObjectName o2) {
return o1.toString().compareTo(o2.toString());
}
});
sortedMap.putAll(unsortedMap);
这种实现非常有用。当有数据新插入进来时,在插入的同时,就按其排序方式插入,省去了排序的时间,在后面使用此结构是,算法的时间复杂度将是O(log n),比O(n)还低。
最差的实现
最差的实现方式就是自己编写排序算法,这种方式一方面算法不是非常高效,另一方面,也很难看懂。只有长期使用C语言的童鞋才会这么实现。
double t;
for (int i = 0; i < 2; i++)
for (int j = i + 1; j < 3; j++)
if (r[j] < r[i]) {
t = r[i];
r[i] = r[j];
r[j] = t;
}