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作为结果,那就按升序进行排序,否则就是按降序排序
相关推荐
当我们需要对List中的元素进行排序时,`Collections.sort()`方法就派上了用场。这个方法能够根据元素的自然顺序或者自定义的比较器进行排序。本文将深入探讨`Collections.sort()`的使用、原理以及如何自定义排序规则...
Java Collections.sort()实现List排序的默认方法和自定义方法 Java Collections.sort()是Java语言中用于对List进行排序的方法,通过使用这个方法可以对List进行默认排序,也可以根据需要实现自定义的排序规则。 ...
Java中Collections.sort排序详解 Java中的Collections.sort排序是Java.util....通过示例代码,展示了如何使用Collections.sort()方法对列表进行排序,并定义了一个Comparator接口的实现类来比较书籍的价格。
在Java编程语言中,`Collections.sort()` 方法是一个非常重要的工具,用于对List接口实现的集合进行排序。这个方法使得开发者能够方便地按照指定的顺序排列集合中的元素。本篇文章将详细探讨如何使用 `Collections....
`Collections.sort()`方法会使用`Comparator`的`compare()`方法来比较列表中的每一对元素,并根据比较结果进行排序。`compare()`方法应该遵循以下规则: 1. 如果`o1`应该出现在`o2`之前,返回负整数。 2. 如果`o1`和...
在 Java 中,Collections.sort() 方法是排序算法的核心方法,该方法可以对列表进行排序。 SORT() 方法可以对列表进行自然排序,也可以根据 Comparator 对象对列表进行自定义排序。 在本文中,我们将使用 Java ...
这个函数是 `java.util.Collections` 类的一个静态方法,适用于列表(List)类型的集合。`Collections.sort()` 可以根据元素的自然顺序或者自定义的比较器(Comparator)进行排序。 ### 1. 自然顺序排序 如果列表...
Collections.sort 方法的第二个参数形式是 public static <T> void sort(List<T> list, Comparator<? super T> c),该方法允许我们通过实现 Comparator 接口的 compare 方法来完成自定义排序。 下面是一个使用...
在Java编程中,集合框架是处理数据的重要工具,而Collections.sort方法则是对列表(List)进行排序的关键函数。本文将深入探讨两种使用Collections.sort方法对List排序的方法。 首先,第一种方法是让List中的对象实现...
`Collections.sort()`是Java中对List进行排序的方法,它接受一个List作为参数,并根据List中元素的自然顺序或者自定义比较器进行排序。在这个例子中,Map的键(key)通常是字符串或其他实现了Comparable接口的对象,...
* `Collections.sort(List<T> list, Comparator<? super T> c)`: 对列表进行自定义排序。 线程安全操作 Collections 中的线程安全操作方法包括同步和不可变集合。这些方法用于保证集合的线程安全。 * `...
1. **自然排序**:如果 `List` 中的元素是实现了 `Comparable` 接口的对象,那么可以使用 `Collections.sort()` 方法进行自然排序。`Comparable` 接口定义了一个 `compareTo()` 方法,该方法用于比较对象之间的大小...
在`List`对象集合中使用`Comparator`进行排序,通常需要调用`Collections.sort()`或`list.sort()`方法。例如,假设我们有一个`Person`类,其中包含`name`和`age`属性,我们想要根据年龄对`Person`对象列表进行排序:...
在Java编程中,Collections工具类提供了许多方便的集合操作,其中`sort()`方法是一个非常重要的功能,用于对List类型的集合进行排序。本文将详细介绍`Collections.sort()`方法的两种使用方式及其示例。 ### 一、...
- 使用`Collections.sort()`方法对列表进行排序,传入相应的`Comparator`实例作为参数。 - 在本例中,我们使用`OrderName`对列表进行排序,然后使用`Collections.reverse()`方法对列表进行反转,以便按降序显示...
`Collections.sort()`是一个通用的方法,可以对List接口的实现类进行排序。在使用这个方法前,确保ArrayList中的元素类型实现了Comparable接口,这样默认按照自然顺序排序;或者提供一个Comparator来定义自定义的...
ArrayList不支持直接排序,但是我们可以通过调用Collections.sort()方法或者自定义Comparator来实现。 `Collections.sort()`方法是Java集合框架提供的一个便捷工具,用于对List接口的实现类进行排序。如果ArrayList...
`Collections.sort()`方法可以对任何实现了`List`接口的对象进行排序,它默认使用元素的自然顺序(即元素所属类必须实现`Comparable`接口)。 首先,让我们了解一下`Collections.sort()`的基本用法。假设我们有一个...
userList.sort(Comparator.comparing(User::getAge)); ``` Comparator也可以用于TreeMap和TreeSet,它们会根据提供的Comparator进行自动排序: ```java TreeSet<User> treeSet = new TreeSet(Comparator.comparing...
- `Collections.sort(List<T> list)`:对List进行排序,需要实现`Comparable`接口或提供自定义`Comparator`。 - `Collections.shuffle(List<?> list)`:随机打乱List中的元素顺序。 - `Collections.reverse(List...