【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. 需要自动排序的集合:
  • 用TreeSet或TreeMap

四、常见问题解答

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要记牢!
相关推荐
AI你一生一世2 小时前
不止于时序存储:DolphinDB 如何成为 AI 时代的工业智能底座
java·人工智能·struts·时序数据库·工业智能·dolphindb·ai基础设施
云-缩影2 小时前
拆解 AI 图像生成应用的后端架构:ECS、OSS 和大模型 API 怎么配合
java·spring boot·后端
瑞克-桑切斯3 小时前
7、MySQL 慢查询排查与优化实战指南
java·服务器·数据库
海的透彻7 小时前
dockerfile如何快速构建容器(java服务)
java·开发语言
code2cat7 小时前
Java工具篇之Gradle:用任务图组织构建与交付
java·开发语言·单元测试·gradle
后台模板学习8 小时前
大模型 Prompt 工程在电商订单系统中的踩坑记录
java·python·prompt
w_zero_one8 小时前
算法--构造
java·数据结构·算法
SL_staff8 小时前
制造业订单交付崩盘?用四层协同框架重建交付可信度(技术实践)
java·产品·全栈
IT规划师8 小时前
编程术语中的同步与异步:从"等不等"到工程取舍
后端·面试
SL_staff9 小时前
打破风控迭代死循环:用决策编排重构业务与技术协作链路
java·产品·全栈