Java 开发人员是如何使用排序的

原文地址:http://www.programcreek.com/2014/03/how-developers-sort-in-java/

在分析大量开源 Java 项目的源代码时,发现 Java 开发人员经常使用以下两种方式进行排序,一种是使用 Collections 或 Array 的 sort() 方法,另一种是使用排序的数据结构,如 TreeMap 和 TreeSet。

1. 使用 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());
    }
});

对于已经组装好的数组或集合,以上两种方式是非常方便的。

2. 使用排序的数据结构

如果是 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(logn) ,低于 O(n)

3. 坏习惯

对于排序,程序员中仍然存在一些坏的习惯,例如使用自定义排序算法。以面的代码为例,不仅算法效率不高,而且不可读:

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;
        }

results matching ""

    No results matching ""