当前位置: 首页 > java >正文

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

一、排序方法

1. 对List排序的两种方式

方式一Collections.sort()

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

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

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

2. 对数组排序

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

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

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

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

1. 数组用.length(属性)

String[] names = {"Alice","Bob"};int len = names.length;// 2

2. 集合都用.size()

 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();// 3int setSize = set.size();   // 3int mapSize = map.size();   // 2

3. 字符串用.length()

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:学生成绩排序

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

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

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

例子3:混合类型排序

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)

记住这个选择口诀:

集合排序用sort或sorted
,要问长度/大小是多少?
数组length集合size要记牢!
http://www.xdnf.cn/news/9241.html

相关文章:

  • 11.Java I/O 流:文件读写与数据持久化​
  • 夏季用电高峰如何防患于未“燃”?电力测温技术守护城市生命线
  • 使用 Redis 作为向量数据库
  • 5G 核心网 UE 状态深度剖析:机制、迁移与演进
  • 新版Chrome浏览器加载eDrawings 3D Viewer控件网页查看DWG、DXF
  • 利用Tushare+pyEcharts进行沪深证券数据采集与分析
  • 单向循环链表与双向链表
  • 洗鞋店干洗店线上预约管理系统;
  • 【OS安装与使用】part7-ubuntu22.04LTS 的 docker 安装与使用(实例:MTransServer服务部署)
  • AI辅助写作 从提笔难到高效创作的智能升级
  • WPF事件处理器+x名称空间
  • 基于多流特征融合与领域知识整合的CNN-xLSTM-xAtt网络用于光电容积脉搏波信号的无创血压估计【代码已复现】
  • C语言学习笔记三 --- V
  • 深信服防火墙拦截了DELETE、PUT请求,未达到nginx及后端服务
  • brep2seq 论文笔记
  • 《软件工程》第 16 章 - 软件项目管理与过程改进
  • C-字符串函数
  • 解析极限编程-拥抱变化(第2版)笔记
  • 【C/C++】多线程下自旋锁的行为逻辑
  • C语言创意编程:用趣味实例玩转基础语法(2)
  • ES 在大查询场景下导致 GC 频繁,如何定位和解决?
  • webstorm调试vite工程(后端开发人员版)
  • 从十进制到二进制:深入理解定点数与浮点数表示
  • 高压单端探头,如何实现大比例的衰减?
  • 【NLP基础知识系列课程-Tokenizer的前世今生第二课】NLP 中的 Tokenizer 技术发展史
  • 【Vue3】生命周期 hook函数 toRef
  • 通义智文开源QwenLong-L1: 迈向长上下文大推理模型的强化学习
  • 浅解Vue 数据可视化开发建议与速度优化
  • 【华为云物联网】如何实现在 MQTT.fx 上模拟数据间隔上传一次,并按设定系数变动数据
  • HTML 表单与输入:基础语法到核心应用全解析