【Java实战】集合排序方法与长度获取方法辨析(易懂版)

一、排序方法

1. 对List排序的两种方式

方式一Collections.sort()

java 复制代码
List<Integer> numbers = Arrays.asList(3,1,4,2);
Collections.sort(numbers); // 直接修改原list → [1,2,3,4]

方式二:list.sort()(Java8推荐)

java 复制代码
List<String> fruits = new ArrayList<>(Arrays.asList("apple","banana","pear"));
fruits.sort(Comparator.comparing(String::length));
 // 按字符串长度排序

2. 对数组排序

java 复制代码
int[] arr = {5,2,7};
Arrays.sort(arr); 
// 数组变为[2,5,7]

3. 不修改原集合的排序(使用Stream)

java 复制代码
List<Integer> original = List.of(3,1,2);
List<Integer> sorted = original.stream()                              .sorted() .toList();
 // 新list [1,2,3]

二、获取长度/大小的方法

1. 数组用.length(属性)

java 复制代码
String[] names = {"Alice","Bob"};int len = names.length;
 // 2

2. 集合都用.size()

java 复制代码
 List<String> list = List.of("a","b","c");
 Set<Integer> set = Set.of(1,2,3);
 Map<String,Integer> map = Map.of("a",1,"b",2);
 int listSize = list.size();
  // 3
  int setSize = set.size();   
  // 3
  int mapSize = map.size();   
  // 2

3. 字符串用.length()

java 复制代码
String s = "hello";
int strLen = s.length();
 // 5

三、使用场景

  1. 需要排序List
  • 想直接修改原list → list.sort()
  • 想保留原list → 用Stream的sorted()
  1. 需要排序数组
  • 只能用Arrays.sort()
  1. 需要自动排序的集合
  • TreeSetTreeMap

四、常见问题解答

Q:为什么数组用length而集合用size?

A:这是Java的历史设计决定。数组是语言基础结构用字段(length),集合是类库用方法(size())

Q:sort()和sorted()区别?

A:

  • sort()直接修改原集合
  • sorted()产生新集合,原集合不变

Q:Set和Map也能排序吗?

A:

  • 普通HashSet/HashMap不能直接排序- 可以用TreeSet/TreeMap自动排序
  • 或者转为List再排序

五、实际例子

例子1:学生成绩排序

java 复制代码
List<Student> students =students.sort(Comparator.comparing(Student::getScore).reversed()); 
// 获取学生列表// 按成绩降序排序

例子2:统计单词频率并排序

java 复制代码
Map<String, Integer> wordCounts = List<Map.Entry<String, Integer>> top10 = wordCounts.entrySet().stream()    .sorted(Map.Entry.comparingByValue().reversed()).limit(10).toList();
// 单词计数map// 按频率排序取前10

例子3:混合类型排序

java 复制代码
List<Object> mixed = Arrays.asList("apple", 123, "banana", 45.6);
mixed.sort(Comparator.comparing(o -> o.toString().length())); 
// 按字符串长度排序

说明:

  1. 核心逻辑
  • Comparator.comparing(o -> o.toString().length()) :
    提取每个元素的字符串表示长度作为排序键,按升序排列(默认规则)。
  • 元素类型转换:
    所有元素通过 toString() 转为字符串,长度计算方式:
  • "apple" → 5
  • 123 → "123" → 3
  • "banana" → 6
  • 45.6 → "45.6" → 4
  1. 执行结果
    排序后列表顺序为:

    123, 45.6, apple, banana

    (按长度升序:3 → 4 → 5 → 6)

记住这个选择口诀:

数组排序用Arrays, 复制代码
集合排序用sort或sorted
,要问长度/大小是多少?
数组length集合size要记牢!
相关推荐
boonya7 小时前
Elasticsearch核心原理与面试总结
大数据·elasticsearch·面试
坐吃山猪8 小时前
SpringBoot01-配置文件
java·开发语言
我叫汪枫8 小时前
《Java餐厅的待客之道:BIO, NIO, AIO三种服务模式的进化》
java·开发语言·nio
yaoxtao9 小时前
java.nio.file.InvalidPathException异常
java·linux·ubuntu
Swift社区10 小时前
从 JDK 1.8 切换到 JDK 21 时遇到 NoProviderFoundException 该如何解决?
java·开发语言
DKPT11 小时前
JVM中如何调优新生代和老生代?
java·jvm·笔记·学习·spring
phltxy11 小时前
JVM——Java虚拟机学习
java·jvm·学习
seabirdssss12 小时前
使用Spring Boot DevTools快速重启功能
java·spring boot·后端
喂完待续13 小时前
【序列晋升】29 Spring Cloud Task 微服务架构下的轻量级任务调度框架
java·spring·spring cloud·云原生·架构·big data·序列晋升