• 欢迎访问天天编码网站,Java技术、技术书单、开发工具,欢迎加入天天编码
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏天天编码吧
  • 我们的淘宝店铺已经开张了哦,传送门:https://shop145764801.taobao.com/

Java的两种最常见排序方式

Java基础 tiantian 1897次浏览 0个评论 扫描二维码

排序是任何编程语言和应用的常见需求,所以,学习数据结构和排序算法是学习任何一门编程语言的前提。但是,本文将不会讨论各种排序算法的细节,我们要研究的是:在实际的项目工程中,Java程序员最喜欢使用的两个排序方法。对大量的开源Java项目的源码进行分析之后,发现Java程序员最常使用的排序方式有两种。一个是直接使用 Collections 或 Arrays 的 sort()方法。另一个是使用有序的数据结构,比如 TreeMap 或 TreeSet。

Java的两种最常见排序方式

sort()方法

如果需要排序一个 Collection ,使用 Colletions.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());
}
});

如果需要排序一个 数组(array) , 使用 Arrays.sort() 方法:

// Arrays.sort
ObjectName[] arr = new ObjectName[10];
Arrays.sort(arr, new Comparator() {
public int compare(ObjectName o1, ObjectName o2) {
return o1.toString().compareTo(o2.toString());
}
});

可以看到,当数组或者Collection已经组装完毕时,使用这个方式非常地方便。

有序的数据结构

如果需要对一个 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 - 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() {
public int compare(ObjectName o1, ObjectName o2) {
return o1.toString().compareTo(o2.toString());
}
});
sortedMap.putAll(unsortedMap);

当我们对集合(Collection)的操作涉及多次的搜寻时,这种方式可以带来性能的较大提升,这种底层基于红黑树的有序集合,对于搜寻操作的时间复杂度为 O(log(n)),远低于无序集合的 O(n)。

不良实践

虽然JDK中已经提供了如何好用且高效的两个排序方式,有些Java程序员依然希望使用自己实现的排序算法。在Java初学者的代码中,经常可以看到如下所示的代码示例:

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

这种自我实现的简单排序算法,不仅性能非常低下,而且可读性并不高,建议禁止使用。当然了,实际的项目代码中可能会有这种方式的很多变种,强烈建议重构代码。


天天编码 , 版权所有丨本文标题:Java的两种最常见排序方式
转载请保留页面地址:http://www.tiantianbianma.com/java-sort-methods.html/
喜欢 (0)
支付宝[多谢打赏]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址