一、排序方法
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
三、使用場景
- 需要排序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:學生成績排序
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()));
// 按字符串長度排序
說明:
- 核心邏輯
- 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)
記住這個選擇口訣:
集合排序用sort或sorted
,要問長度/大小是多少?
數組length集合size要記牢!