4.10 如何在Java中进行排序开发

在分析大量的开源Java项目源码时候,我发现Java开发者经常使用两种方式进行排序。一个是使用Collections或者Arrays的sort()方法,另一个是使用排序的数据结构,比如TreeMap和TreeSet。

1.使用排序方法

如果它是个集合,可以使用集合的sort()方法。

// Collections.sort
List list = new ArrayList();
Collections.sort(list, new Comparator() {
    public int compare(ObjectName o1, ObjectName o2) {
        return o1.toString().compareTo(o2.toString());
    }
});

如果已经配置了集合或数组,这非常方便。

2.利用排序的数据结构

如果是个list或set,可以利用TreeSet进行排序。

// TreeSet
Set sortedSet = new TreeSet(new Comparator() {
    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 sortedMap = new TreeMap(String.CASE_INSENSITIVE_ORDER);
sortedMap.putAll(unsortedMap);
//TreeMap - In general, defined comparator
Map sortedMap = new TreeMap(new Comparator() {
    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;
        }

你可能感兴趣的:(4.10 如何在Java中进行排序开发)