通常Java开发人员如何进行数据排序?

在实际工作中和平时学习中,以及分析开源Java项目的大量源代码后,我发现Java开发人员通常使用两种方法。一是使用Collections或 Arrays的 sort()方法 ,另一种是使用数据结构排序,如 TreeMap和 TreeSet。

网络配图 1、使用sort()方法进行排序,这也比较常的方法: 如果我们写代码时,用的是一个集合,那么使用Collections.sort()方法。 代码举例:

// 集合排序法Collections.sort
List<String> list =new ArrayList<String>();
Collections.sort(list, new Comparator<String>(){
public int compare(String o1, String o2){
return o1.toString().compareTo(o2.toString());
}});

如果代码实现中用的是一个数组,那么使用 Arrays.sort()方法。

// 数组排序法Arrays.sort
String[] arr =new String[10];
Arrays.sort(arr, new Comparator<String>(){
public int compare(String o1, String o2){
return o1.toString().compareTo(o2.toString());
}});

如果我们已经建立好一个集合或数组,用这种方法排序非常方便。

网络配图 2、使用数据结构排序方法 如果我们代码实现中是一个或一组列表,那么使用 TreeSet进行排序。

// TreeSet排序方法
Set<String> unsortedSet =new TreeSet<String>();
Set<String> sortedSet = new TreeSet<String>(new Comparator<String>() {
public int compare(String o1, String o2) {
return o1.toString().compareTo(o2.toString());
}
});
sortedSet.addAll(unsortedSet);

如果代码实现是一个Map,那么使用 TreeMap进行排序。

// TreeMap方法
Map<String, Integer> unsortedMap = new TreeMap<String, Integer>();
Map<String, Integer> sortedMap = new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER);
sortedMap.putAll(unsortedMap);
//TreeMap方法对比
Map<ObjectName, String> sortedMap1 = new TreeMap<ObjectName, String>(new Comparator<ObjectName>() {
public int compare(ObjectName o1, ObjectName o2) {
return o1.toString().compareTo(o2.toString());
}
});

sortedMap.putAll(unsortedMap);

这种方法在开发过程中非常有用,如果你想实现在集合中做搜索操作,数据结构排序方法,会提高效率。

网络配图 3、以下是一个经常使用的不合理的方法 比如使用自定义排序算法,下面以代码为例进行说明,这种方法不仅算法是无效的,而且可读性很差。

double t;
double[] r = new double[5];
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学习网(javalearns)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏老马说编程

(38) 剖析ArrayList / 计算机程序的思维逻辑

从本节开始,我们探讨Java中的容器类,所谓容器,顾名思义就是容纳其他数据的,计算机课程中有一门课叫数据结构,可以粗略对应于Java中的容器类,我们不会介绍所有...

23250
来自专栏来自地球男人的部落格

[LeetCode] 347. Top K Frequent Elements

【原题】 Given a non-empty array of integers, return the k most frequent elements...

31770
来自专栏余林丰

3.比较排序之堆排序

  对于堆排序会涉及一些完全二叉树知识。对于待排序列{10, 2, 11, 8, 7},把它看成是一颗完全二叉树,如下图所示。 ?   堆分为大根堆和小根堆:大...

23080
来自专栏Jed的技术阶梯

常见Java集合的实现细节(一):Map和Set的关系

这些接口和类名如此相似绝不是偶然的现象,实际上,这些Map集合的key有一个特征:所有的key不能重复,key之间没有顺序,也就是说,这些Map的key可以组成...

57920
来自专栏尾尾部落

[LeetCode]Longest Continuous Increasing Subsequence 最长连续增长序列 [LeetCode]Longest Continuous Incr

链接:https://leetcode.com/problems/longest-continuous-increasing-subsequence/descr...

8510
来自专栏Java Web

数据结构与算法(4)——优先队列和堆什么是优先队列?堆和二叉堆LeetCode相关题目整理

听这个名字就能知道,优先队列也是一种队列,只不过不同的是,优先队列的出队顺序是按照优先级来的;在有些情况下,可能需要找到元素集合中的最小或者最大元素,可以利用优...

48610
来自专栏小樱的经验随笔

【经验总结】Java在ACM算法竞赛编程中易错点

一、Java之ACM易错点 1. 类名称必须采用public class Main方式命名 2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输...

36840
来自专栏云霄雨霁

查找----基于二叉查找树

12300
来自专栏F_Alex

数据结构与算法(二)-线性表之单链表顺序存储和链式存储

前言:前面已经介绍过数据结构和算法的基本概念,下面就开始总结一下数据结构中逻辑结构下的分支——线性结构线性表

23420
来自专栏微信公众号:Java团长

Java HashMap的工作原理

面试的时候经常会遇见诸如:“java中的HashMap是怎么工作的”,“HashMap的get和put内部的工作原理”这样的问题。本文将用一个简单的例子来解释下...

7820

扫码关注云+社区

领取腾讯云代金券