一、排序方法
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
三、使用场景
- 需要排序List:
- 想直接修改原list →
list.sort()
- 想保留原list → 用Stream的
sorted()
- 需要排序数组:
- 只能用
Arrays.sort()
- 需要自动排序的集合:
- 用
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()));
// 按字符串长度排序
说明:
- 核心逻辑
- Comparator.comparing(o -> o.toString().length()) :
提取每个元素的字符串表示长度作为排序键,按升序排列(默认规则)。 - 元素类型转换:
所有元素通过 toString() 转为字符串,长度计算方式: - "apple" → 5
- 123 → "123" → 3
- "banana" → 6
- 45.6 → "45.6" → 4
- 执行结果
排序后列表顺序为:123, 45.6, apple, banana
(按长度升序:3 → 4 → 5 → 6)
记住这个选择口诀:
数组排序用Arrays,
集合排序用sort或sorted
,要问长度/大小是多少?
数组length集合size要记牢!