Java集合排序依赖Comparable(自然排序)和Comparator(定制排序)接口,配合Collections或Stream API实现;需注意null处理、不可变集合限制及线程安全。
Java 中对集合排序主要依靠 Comparable 和 Comparator 两大接口,配合 Collections 或 Stream API 使用。核心在于明确“按什么排”和“怎么排”,而不是简单调用 sort 方法。
当集合元素自身具备明确、唯一的大小逻辑(如 Student 按学号、String 按字典序),可让类实现 Comparable 接口并重写 compareTo() 方法。
Collections.sort(list) 或 list.sort(null) 即可例如:Person 类实现 Comparable 后,Collections.sort(people) 就按姓名升序排列。
当需要多种排序规则(如按年龄、按姓名长度、降序)、或无法修改元素类源码时,用 Comparator 更灵活。
Collections.sort(list, comparator) 或 list.sort(comparator)
sorted(comparator) 返回新流,不修改原集
合例如:按年龄降序: list.sort((a, b) -> Integer.compare(b.getAge(), a.getAge()))
Map 本身无序(HashMap)或按插入顺序(LinkedHashMap),排序需转为 List 处理:
new TreeMap(originalMap)(要求 key 实现 Comparable)entrySet() 转为 List,再用 Comparator.comparing(Map.Entry::getValue) 排序map.entrySet().stream().sorted(comparingByValue()).collect(toMap(...))
排序前务必确认数据质量:
Comparable 默认会报错;可用 Comparator.nullsFirst() 或 nullsLast() 显式处理