在阅读开源Java项目源代码过程中,我发现Java开发者经常使用两种开发方式排序:一种是使用Collections和Arrays类的sort方法,另一种是使用可排序的数据结构。
使用sort()方法
1
2
3
4
5
6
7
|
// 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());
}
});
|
1
2
3
4
5
6
7
|
// 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());
}
});
|
使用可排序的数据结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
// 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);
// 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);
|
不好的编程实践
也有很多不好的编程实践,比如使用自定义的排序算法。下面的代码不仅算法效率不高,而且可读性差。
1
2
3
4
5
6
7
8
|
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;
}
|