> 文章列表 > Java集合Collections和元素排序之Comparable排序接口讲解

Java集合Collections和元素排序之Comparable排序接口讲解

了解了集合工具类Collections的sort()方法的默认排序规则后,我们可以进一步探讨和拓展这个主题:

问题1:为什么默认排序时大写字母会排在小写字母前面?

这是因为默认情况下,String类型的比较是基于字符的Unicode值。大写字母的Unicode码值在小写字母之前。例如,'A'的Unicode码值是65,而'a'的Unicode码值是97。所以当你混合使用大小写字母时,会发现大写的字母会排在最前面。

举个例子,如果你有一段代码类似:

`java
list.add("Apple");
list.add("banana");
list.add("Cherry");
Collections.sort(list);
`

排序后的结果会是:"Apple", "Cherry", "banana"。这是因为'A'(65)和'C'(67)比'b'(98)要小。这种默认的排序逻辑可能会让刚开始学习的同学感到困惑,但了解了背后的原理后就能理解了。

问题2:如何实现自定义排序规则,比如按字符串长度排序呢?

这时候就可以使用Comparator接口。我们可以自定义一个Comparator,在比较两个字符串时,按照它们的长度来进行排序。例如:

`java
Collections.sort(list, new Comparator() {
@Override
public int compare(String s1, String s2) {
return Integer.compare(s1.length(), s2.length());
}
});
`

这样就能按照字符串长度从短到长的顺序排序。如果想反过来,把长的排前面,只需要反过来比较即可。

问题3:排序时遇到数字字符,会怎样处理?

比如说字符串中有"100"、"20"、"3"这样的元素,直接Collections.sort(list)的话,结果会是"100", "20", "3",这是因为String比较是逐个字符比较的,而不是看作数字来比较。这时候如果想按数字大小排序,就需要自定义Comparator,将字符串转换成Integer进行比较。

学习这些排序规则后,你是不是已经迫不及待想自己动手尝试这些代码了?别急,把这些概念弄清楚后,再结合具体的业务需求,你就能轻松应对各种排序场景了!

Java集合Collections和元素排序之Comparable排序接口讲解

    Collections工具类: Java里关于集合的工具类,包含有各种有关集合操作的静态多态方法,不能实例化(把构造函数私有化) 。

    和Collection的区别 : Collection是接口,提供了对集合对象进行基本操作的通用接口方法,List、Set等多种具体的实现类。Collections是工具类,专门操作Collection接口实现类里面的元素。

    常用方法: 排序 sort(List list)

   按自然排序的升序排序

    可见, 默认排序后是按字母升序输出。

Java集合Collections和元素排序之Comparable排序接口讲解

package Demo_1;import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;public class SortTest {public static void main(String[] args) {sortTest();}public static void sortTest() {List<String> list = new ArrayList<>();list.add("aaa");list.add("yyy");list.add("mmm");list.add("ddd");System.out.println("排序前:" + " " + list);Collections.sort(list);System.out.println("排序后:" + " " + list);

    当数组里包括大小写,排序输出结果为先排大写,再排小写。

Java集合Collections和元素排序之Comparable排序接口讲解

package Demo_1;public class SortTest {public static void main(String[] args) {sortTest();}public static void sortTest() {List<String> list = new ArrayList<>();list.add("AAA");list.add("yyy");list.add("MMM");list.add("ddd");System.out.println("排序前:" + " " + list);Collections.sort(list);System.out.println("排序后:" + " " + list);

    默认是升序,等于Collections.sort(list), Collections.sort(list, Comparator.naturalOrder())

    降序: Collections.sort(list,Comparator.reverseOrder());

Java集合Collections和元素排序之Comparable排序接口讲解

//默认升序Collections.sort