常用的集合类有哪些?比如List如何排序?

Java的集合类整体分为两大核心体系,不同实现类适配不同的业务场景,List的排序也有多种适配不同JDK版本的实现方式,具体内容如下:

一、常用集合类分类

Java集合类全部位于java.util包中,核心分为Collection和Map两大独立体系:

Collection体系(存储单个独立元素)‌

List分支‌:有序可重复,支持通过下标访问元素

ArrayList:底层是动态数组,随机查询性能极高,是日常开发90%场景的首选集合,仅在中间位置增删元素时需要批量移动数据,大数据量下性能会下降

LinkedList:底层是双向链表,头尾增删元素仅需修改指针,性能优异,但不支持下标随机访问,遍历查询效率较低

Set分支‌:元素不可重复

HashSet:底层基于哈希表实现,完全无序,是纯去重工具

LinkedHashSet:哈希表结合链表实现,保留元素插入顺序,去重同时保证顺序不乱

TreeSet:底层基于红黑树实现,支持元素自动排序,是有序去重的首选

Queue分支‌:主打排队机制

普通队列遵循先进先出规则,优先级队列底层基于堆结构实现,支持按任务权重排序,高优先级元素优先出队

Map体系(存储键值对映射)‌

HashMap:底层基于哈希表实现,无序,是日常开发高性能存储的主力实现

LinkedHashMap:哈希表结合链表实现,保留键的插入顺序,适合做有序缓存

TreeMap:底层基于红黑树实现,全局自动排序,适合需要按键自然序遍历的场景

早期的Hashtable自带全局同步锁,性能极差,目前已基本被淘汰

二、List的常见排序方式

Java中List排序有3种主流实现方案,适配不同的业务需求:

基于Comparable接口的自然排序‌

让自定义实体类实现Comparable接口,重写compareTo方法定义默认排序规则,直接调用Collections.sort(list)即可完成排序,适合实体类自带固定排序逻辑的场景。

java 复制代码
class Person implements Comparable<Person> {
    private int age;
    // 省略构造、get/set方法
    @Override
    public int compareTo(Person p) {
        // 按年龄降序排序
        return p.getAge() - this.age;
    }
}

// 直接调用排序

List list = new ArrayList<>();

Collections.sort(list);

基于Comparator接口的自定义排序‌

无需修改原有实体类,通过外部比较器灵活定义临时排序规则,支持匿名类、Lambda简化写法,适配需要动态切换排序逻辑的场景。

java 复制代码
// 按年龄升序,使用Lambda简化写法
list.sort((p1, p2) -> Integer.compare(p1.getAge(), p2.getAge()));
// 基础类型集合快速降序
List<Integer> nums = Arrays.asList(5,3,8,1);
Collections.sort(nums, Collections.reverseOrder());

JDK 8+ Stream流排序‌

借助Stream的sorted()方法实现链式排序,支持多字段组合排序,代码可读性更高,还可以结合并行流利用多核CPU提升大集合排序效率。

java 复制代码
// 先按年龄降序,年龄相同再按ID升序
List<Person> sortedList = list.stream()
        .sorted(Comparator.comparing(Person::getAge).reversed()
                .thenComparing(Person::getId))
        .collect(Collectors.toList());
相关推荐
ywl4708120875 小时前
ArrayList和LinkedList内部的实现原理和区别
java·java基础
绝世番茄8 小时前
鸿蒙原生ArkTS布局方式之List+swipeAction侧滑菜单深度解析
华为·list·harmonyos·鸿蒙
2501_943782333 天前
【共创季稿事节】鸿蒙原生 ArkTS 布局实现 Column + List + Navigation 协作导航 — 从列表渲染到页面切换的完整实践
学习·华为·list·harmonyos·鸿蒙
栈溢出了3 天前
Redis 消息队列笔记:List 与 Pub/Sub
redis·笔记·list
世人万千丶21 天前
成语接龙小应用 - HarmonyOS ArkUI 开发实战-TextInput与List列表-PC版本
华为·list·harmonyos·鸿蒙·鸿蒙系统
未若君雅裁21 天前
Python 数据容器详解,list、tuple、str、set、dict 到底怎么选
windows·python·list
苦学的罐头22 天前
C# 协变与逆变深度解析:为什么 IEnumerable<T> 能转换,而 List<T> 不行?
开发语言·c#·list
世人万千丶22 天前
家庭记账本小应用 - HarmonyOS ArkUI 开发实战-Tabs与List组件-PC版本
华为·list·harmonyos·鸿蒙
祭曦念23 天前
【共创季稿事节】鸿蒙原生 ArkTS 布局实践:List + onReachStart/End 分页加载完全指南
windows·list·harmonyos