`
jjhpeopl
  • 浏览: 110412 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Collections.sort(List, Comparator)方法解析

阅读更多

Collections.sort()方法有两种参数类型,如下:

Collections.sort(List<T> list),直接给定需要排序的list,然后按照自然排序进行排序。

Collections.sort(List<T> list,Comparator<? super T> c),这个方法需要提供比较器,然后排序时会根据比较器的实现逻辑进行排序。

简单看一下提供比较器的方法实现,里面有一段代码需要注意,这段代码其实就是最终决定了排序时是升序还是降序。

private static <T> int countRunAndMakeAscending(T[] a, int lo, int hi,
                                                Comparator<? super T> c) {
    assert lo < hi;
    int runHi = lo + 1;
    if (runHi == hi)
        return 1;

    // Find end of run, and reverse range if descending
 if (c.compare(a[runHi++], a[lo]) < 0) { // Descending
 while (runHi < hi && c.compare(a[runHi], a[runHi - 1]) < 0)
            runHi++;
        reverseRange(a, lo, runHi);
    } else {                              // Ascending
 while (runHi < hi && c.compare(a[runHi], a[runHi - 1]) >= 0)
            runHi++;
    }

    return runHi - lo;
}

看以上代码,主要关注两点:

1、使用提供的比较器进行值比较时,传递进去的第一个参数是队列后面的值,传递的第二个参数是队列前面的值

2、即使比较器返回的是小于0,按照desc方式排序了,但最后会调用reverseRange方法,进行排序反转,也就是最终都是按大于0的方式进行的排序

以上两点不难总结出:

1、队列第一个值大于第二个值的情况下:

  • 比较器中用参数1减去参数2作为结果,实际是队列中的第二个值减去第一个值,按升序进行排序
  • 比较器中用参数2减去参数1作为结果,实际是队列中的第一个值减去第二个值,按降序进行排序

2、队列第一个值小于第二个值的情况下:

  • 比较器中用参数1减去参数2作为结果,实际是队列中的第二个值减去第一个值,按升序进行排序
  • 比较器中用参数2减去参数1作为结果,实际是队列中的第一个值减去第二个值,按降序进行排序

针对以上总结,很容易看出,是升序还是降序,其实跟队列第一个值和第二个值的大小没有关系,直接和比较器实现的逻辑有关系。

比较器中若是参数1减去参数2作为结果,那就按升序进行排序,否则就是按降序排序

 

1
0
分享到:
评论

相关推荐

    java List 排序 Collections.sort

    当我们需要对List中的元素进行排序时,`Collections.sort()`方法就派上了用场。这个方法能够根据元素的自然顺序或者自定义的比较器进行排序。本文将深入探讨`Collections.sort()`的使用、原理以及如何自定义排序规则...

    Java Collections.sort()实现List排序的默认方法和自定义方法

    Java Collections.sort()实现List排序的默认方法和自定义方法 Java Collections.sort()是Java语言中用于对List进行排序的方法,通过使用这个方法可以对List进行默认排序,也可以根据需要实现自定义的排序规则。 ...

    java中Collections.sort排序详解

    Java中Collections.sort排序详解 Java中的Collections.sort排序是Java.util....通过示例代码,展示了如何使用Collections.sort()方法对列表进行排序,并定义了一个Comparator接口的实现类来比较书籍的价格。

    JAVA对list集合进行排序Collections.sort()

    在Java编程语言中,`Collections.sort()` 方法是一个非常重要的工具,用于对List接口实现的集合进行排序。这个方法使得开发者能够方便地按照指定的顺序排列集合中的元素。本篇文章将详细探讨如何使用 `Collections....

    详解Java中Collections.sort排序

    `Collections.sort()`方法会使用`Comparator`的`compare()`方法来比较列表中的每一对元素,并根据比较结果进行排序。`compare()`方法应该遵循以下规则: 1. 如果`o1`应该出现在`o2`之前,返回负整数。 2. 如果`o1`和...

    Java Collections.sort()排序代码案例

    在 Java 中,Collections.sort() 方法是排序算法的核心方法,该方法可以对列表进行排序。 SORT() 方法可以对列表进行自然排序,也可以根据 Comparator 对象对列表进行自定义排序。 在本文中,我们将使用 Java ...

    java中Collections.sort排序函数用法详解

    这个函数是 `java.util.Collections` 类的一个静态方法,适用于列表(List)类型的集合。`Collections.sort()` 可以根据元素的自然顺序或者自定义的比较器(Comparator)进行排序。 ### 1. 自然顺序排序 如果列表...

    详解java Collections.sort的两种用法

    Collections.sort 方法的第二个参数形式是 public static &lt;T&gt; void sort(List&lt;T&gt; list, Comparator&lt;? super T&gt; c),该方法允许我们通过实现 Comparator 接口的 compare 方法来完成自定义排序。 下面是一个使用...

    用Java集合中的Collections.sort方法如何对list排序(两种方法)

    在Java编程中,集合框架是处理数据的重要工具,而Collections.sort方法则是对列表(List)进行排序的关键函数。本文将深入探讨两种使用Collections.sort方法对List排序的方法。 首先,第一种方法是让List中的对象实现...

    listview按序排列显示

    `Collections.sort()`是Java中对List进行排序的方法,它接受一个List作为参数,并根据List中元素的自然顺序或者自定义比较器进行排序。在这个例子中,Map的键(key)通常是字符串或其他实现了Comparable接口的对象,...

    Collections

    * `Collections.sort(List&lt;T&gt; list, Comparator&lt;? super T&gt; c)`: 对列表进行自定义排序。 线程安全操作 Collections 中的线程安全操作方法包括同步和不可变集合。这些方法用于保证集合的线程安全。 * `...

    java 使用Collections类对List的排序操作

    1. **自然排序**:如果 `List` 中的元素是实现了 `Comparable` 接口的对象,那么可以使用 `Collections.sort()` 方法进行自然排序。`Comparable` 接口定义了一个 `compareTo()` 方法,该方法用于比较对象之间的大小...

    List对象集合的排序:比较器Comparator(简单例子)

    在`List`对象集合中使用`Comparator`进行排序,通常需要调用`Collections.sort()`或`list.sort()`方法。例如,假设我们有一个`Person`类,其中包含`name`和`age`属性,我们想要根据年龄对`Person`对象列表进行排序:...

    JAVA中Collections工具类sort()排序方法

    在Java编程中,Collections工具类提供了许多方便的集合操作,其中`sort()`方法是一个非常重要的功能,用于对List类型的集合进行排序。本文将详细介绍`Collections.sort()`方法的两种使用方式及其示例。 ### 一、...

    Comparator 排序器

    - 使用`Collections.sort()`方法对列表进行排序,传入相应的`Comparator`实例作为参数。 - 在本例中,我们使用`OrderName`对列表进行排序,然后使用`Collections.reverse()`方法对列表进行反转,以便按降序显示...

    arrayList排序

    `Collections.sort()`是一个通用的方法,可以对List接口的实现类进行排序。在使用这个方法前,确保ArrayList中的元素类型实现了Comparable接口,这样默认按照自然顺序排序;或者提供一个Comparator来定义自定义的...

    arraylist 对象 数组排序

    ArrayList不支持直接排序,但是我们可以通过调用Collections.sort()方法或者自定义Comparator来实现。 `Collections.sort()`方法是Java集合框架提供的一个便捷工具,用于对List接口的实现类进行排序。如果ArrayList...

    关于list的排序

    `Collections.sort()`方法可以对任何实现了`List`接口的对象进行排序,它默认使用元素的自然顺序(即元素所属类必须实现`Comparable`接口)。 首先,让我们了解一下`Collections.sort()`的基本用法。假设我们有一个...

    java Comparator 用法 例子

    userList.sort(Comparator.comparing(User::getAge)); ``` Comparator也可以用于TreeMap和TreeSet,它们会根据提供的Comparator进行自动排序: ```java TreeSet&lt;User&gt; treeSet = new TreeSet(Comparator.comparing...

    javaclooections类.docx

    - `Collections.sort(List&lt;T&gt; list)`:对List进行排序,需要实现`Comparable`接口或提供自定义`Comparator`。 - `Collections.shuffle(List&lt;?&gt; list)`:随机打乱List中的元素顺序。 - `Collections.reverse(List...

Global site tag (gtag.js) - Google Analytics