Java 集合框架架构:15 分钟快速回顾指南

Java 集合框架架构:15 分钟快速回顾指南

概述

Java 集合框架是处理对象集合的统一架构,简化了数据存储、查询和操作的实现。它像一个 “容器工具箱”,提供了各种数据结构(如列表、集合、映射),让开发者无需重复造轮子。

核心价值:统一接口 + 多样实现—— 无论使用ArrayList还是HashMap,都能通过标准化方法操作,降低学习和使用成本。

一、集合框架整体架构(UML 类图核心)

集合框架分为两大体系:Collection(存储单元素)Map(存储键值对)。以下是简化的继承关系图(建议手绘时参考):

┌─────────────────────────────────────────┐  
│              Iterable接口               │  // 所有集合的根接口,支持迭代(foreach循环)  
└───────────────────┬─────────────────────┘  
                    ↓  
┌─────────────────────────────────────────┐  
│             Collection接口              │  // 单元素集合的顶层接口  
├───────────────┬────────────┬────────────┤  
│               │            │            │  
↓               ↓            ↓            ↓  
┌──────────┐ ┌─────────┐ ┌────────┐ ┌──────────┐  
│  List    │ │   Set   │ │ Queue  │ │  ...     │  // 子接口(按特性分类)  
└────┬─────┘ └────┬────┘ └────┬───┘ └──────────┘  
     │            │           │  
     ↓            ↓           ↓  
┌──────────┐ ┌─────────┐ ┌────────┐  
│ArrayList │ │HashSet  │ │LinkedList│  // 典型实现类  
│LinkedList│ │TreeSet  │ │PriorityQueue│  
└──────────┘ └─────────┘ └────────┘  

// 独立体系:Map(键值对存储)  
┌─────────────────────────────────────────┐  
│               Map接口                   │  // 键值对集合顶层接口  
├───────────────┬────────────┬────────────┤  
│               │            │            │  
↓               ↓            ↓            ↓  
┌──────────┐ ┌─────────┐ ┌────────┐ ┌──────────┐  
│HashMap   │ │TreeMap  │ │LinkedHashMap│ │Hashtable │  // 实现类  
└──────────┘ └─────────┘ └────────┘ └──────────┘  

二、核心体系详解

1. Collection 体系(单元素集合)

特点:存储单个对象,继承Iterable接口,支持迭代遍历。

(1)List 接口
  • 核心特性有序(元素插入顺序可保持)、可重复(允许元素值相同)、有索引(可通过下标访问)。

  • 典型实现类

    • ArrayList:底层是动态数组,查询快(随机访问)、增删慢(需移动元素),适合读多写少场景(如展示列表)。
    • LinkedList:底层是双向链表,增删快(只需修改指针)、查询慢(需遍历),适合频繁插入删除场景(如队列、栈)。
  • 代码示例

// ArrayList示例
List<String> arrayList = new ArrayList<>();
arrayList.add("apple");  // 有序添加
arrayList.add("banana");
arrayList.get(0);  // 快速查询(O(1))

// LinkedList示例
List<String> linkedList = new LinkedList<>();
linkedList.add("cat");
linkedList.addFirst("dog");  // 头部插入(O(1))
(2)Set 接口
  • 核心特性无序(HashSet)、不可重复(元素需重写equals()和hashCode())。

  • 典型实现类

    • HashSet:底层是哈希表,查询 / 增删效率高(O (1)),适合去重场景(如存储用户 ID)。
    • TreeSet:底层是红黑树,元素自动排序(自然排序或定制排序),适合需要排序的去重场景(如排行榜)。
    • LinkedHashSet:继承 HashSet,同时维护插入顺序,兼顾去重和顺序需求。
  • 代码示例

// HashSet去重
Set<String> hashSet = new HashSet<>();
hashSet.add("apple");
hashSet.add("apple");  // 重复元素会被忽略
System.out.println(hashSet.size());  // 输出:1

// TreeSet排序
Set<Integer> treeSet = new TreeSet<>();
treeSet.add(3);
treeSet.add(1);
System.out.println(treeSet);  // 输出:[1, 3](自动排序)
(3)Queue 接口
  • 核心特性先进先出(FIFO),主要用于存储待处理元素(如任务队列)。

  • 典型实现类

    • LinkedList:实现了 Queue 接口,可作为普通队列使用。
    • PriorityQueue:优先队列,元素按优先级出队(非 FIFO),适合任务调度场景。
  • 代码示例

// 普通队列(FIFO)
Queue<String> queue = new LinkedList<>();
queue.offer("任务1");  // 入队
queue.offer("任务2");
System.out.println(queue.poll());  // 出队:任务1(先入先出)

// 优先队列(按自然顺序)
Queue<Integer> priorityQueue = new PriorityQueue<>();
priorityQueue.offer(3);
priorityQueue.offer(1);
System.out.println(priorityQueue.poll());  // 出队:1(优先级高)

2. Map 体系(键值对集合)

特点:存储Key-Value键值对,Key 唯一(重复会覆盖),Value 可重复,通过 Key 快速查询 Value。

典型实现类
  • HashMap:底层是哈希表,查询 / 增删效率高(O (1)),Key 无序,适合普通键值对存储(如配置信息)。

  • TreeMap:底层是红黑树,Key 自动排序,适合需要按 Key 排序的场景(如字典)。

  • LinkedHashMap:继承 HashMap,维护 Key 的插入顺序,适合需要保留插入顺序的场景(如缓存)。

  • 代码示例

// HashMap示例
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("apple", 10);  // 存储键值对
hashMap.put("banana", 20);
System.out.println(hashMap.get("apple"));  // 查询:10

// TreeMap排序(按Key自然顺序)
Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("b", 2);
treeMap.put("a", 1);
System.out.println(treeMap.keySet());  // 输出:[a, b](Key排序)

三、实用技巧:集合选择决策树

面对场景不知选哪种集合?按以下步骤判断:

  1. 是否需要键值对存储?
    • 是 → 选Map体系(HashMap/TreeMap)。
    • 否 → 进入Collection体系。
  1. 是否允许重复元素?
    • 是 → 选List(ArrayList/LinkedList)。
    • 否 → 选Set(HashSet/TreeSet)。
  1. 是否需要排序?
    • 是 → TreeSet(Set)/TreeMap(Map)。
    • 否 → 优先选 HashSet/HashMap(效率更高)。
  1. 是否需要保持插入顺序?
    • 是 → LinkedHashSet/LinkedHashMap/LinkedList。

四、注意事项

  1. 线程安全:集合框架中大部分类(如 ArrayList、HashMap)是非线程安全的,多线程环境需使用Collections.synchronizedList()等包装类,或ConcurrentHashMap。

  2. null 值处理

    • ArrayList允许 null 值,HashSet允许一个 null 值。
    • HashMap允许 Key 为 null(仅一个),Value 可为 null;Hashtable不允许 null。
  1. 重写方法:使用HashSet或HashMap时,元素(Key)需重写equals()和hashCode(),否则可能导致去重失效。

总结:核心要点速览

体系接口 / 类核心特性典型场景
CollectionList(ArrayList)有序、可重复、查询快展示列表、读多写少
Set(HashSet)无序、不可重复、效率高去重(如用户 ID)
QueueFIFO / 优先级任务队列、调度
MapHashMap键值对、无序、效率高配置存储、快速查询
TreeMap键值对、Key 排序字典、按 Key 排序的数据

15 分钟内,通过手绘 UML 图 + 记忆核心特性,即可掌握集合框架的整体架构。关键是理解 “接口定规则,实现类定细节” 的设计思想,根据场景灵活选择合适的集合~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值