本文共 2230 字,大约阅读时间需要 7 分钟。
(Notice:欢迎交流和沟通,Wx:IT_Ezra,QQ 654303408。 有问题讨论也可联系我。)
(PS:其实当我们在工作中,有时候会用到这种排序,所以我在这里会稍微介绍一下这种排序,主要运用到了集合类。)
为什么我们需要做排序?
排序对于我们来说是一件非常基础的事情,排序算法有很多,但是在实际过程中,我们为必也用得到。因为java都为我们封装好了,我们可以更加去了解arrays.sort()和collections.sort()的排序算法实现。collection内部是使用的arrays.sort。而arrays.sort()的实现就是归并加排序。对于网上的一些技术贴,里面也提到了如果数组长度小于47,就会使用插入算法。如果小于286就会使用双轴快速排序,如果大于286就会使用归并算法。还有目前一个算法,可以了解一下。另外也有一个说法就是,Arrays.sort() 采用了2种排序算法 – 基本类型数据使用快速排序法,对象数组使用归并排序。所以可以看到,了解这些还是有必要的。
点题
其实这个问题,我们使用了collections.sort()方法,其中第一个参数为List的泛型,任何对象都可以。包括Map,后面跟的的比较器comparator(),然后重写比较器里面的compare方法()。返回值为int,如果正数为正序,负数为逆序。通常是Obecjt_1.compareTo(Object_2)。放一段代码可以体验一下。
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.List;import java.util.Map; public class java_ListMapSort { public static void main(String[] args) { // TODO Auto-generated method stub List
对于java1.7,我们是使用的这种方法。对于java1.8的新特征,有了Lambda表达式。代码写起来就更加简单了一点。核心代码如下。如果你的map里面本身放的就是int类型,就可以不需要转型了。直接get(“key”),然后进行比较。
Collections.sort(list, (o1,o2)-> { Integer name1 = Integer.valueOf(o1.get("cj").toString()) ;//name1是从你list里的第一个name Integer name2 = Integer.valueOf(o2.get("cj").toString()) ; //name2是从你list里第二个name return name1.compareTo(name2); } });
Look,lambda表达式是不是看起来更简洁,java也在更新,多了解一些java的新特性。让自己更方便的写代码。希望各位同学默默加油咯。
转载地址:http://ftcii.baihongyu.com/