Java 容器类全面整理(Collection + Map)

在 Java 开发中,容器类(Collection Framework)用于存储和管理对象集合,是日常开发中最常使用的工具之一。

Java 容器框架主要分为两大体系:

  • Collection体系:存储单个元素

  • Map体系:存储键值对(key-value)


一、Java 容器整体结构

Collection体系

Map体系


二、Collection 接口

Collection 是所有单列集合的父接口。

常见方法:

add(E e)        //添加元素
remove(Object o)//删除元素
size()          //集合大小
isEmpty()       //是否为空
contains(Object o)//是否包含
clear()         //清空
iterator()      //迭代器

Collection 主要分为两大类:

  • List(有序可重复)

  • Set(无序不可重复)


三、List 集合(有序,可重复)

List 特点:

  • 元素有顺序

  • 元素可以重复

  • 支持索引访问

常见实现类:

类 特点


ArrayList 底层数组 LinkedList 底层双向链表 Vector 线程安全


1 ArrayList

特点:

  • 底层:动态数组

  • 查询快

  • 增删慢

示例:

List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
System.out.println(list.get(1));

扩容机制:

默认容量:10

扩容公式:

newCapacity = oldCapacity + oldCapacity/2


2 LinkedList

特点:

  • 底层:双向链表

  • 插入删除快

  • 查询慢

结构:

A <-> B <-> C <-> D


3 Vector

特点:

  • 线程安全

  • 性能较低

  • 基本被 ArrayList 取代


四、Set 集合(无序,不可重复)

Set 特点:

  • 元素不能重复

  • 没有索引

  • 判断重复依赖 hashCode() 和 equals()

常见实现类:

类 特点


HashSet 哈希表 LinkedHashSet 有序 TreeSet 排序


HashSet

特点:

  • 底层:HashMap

  • 无序

  • 不能重复

去重原理:

  1. 先比较 hashCode()

  2. 再比较 equals()


LinkedHashSet

特点:

  • 保持插入顺序

  • 底层:HashSet + 链表


TreeSet

特点:

  • 自动排序

  • 底层:红黑树


五、Map 集合(键值对)

Map 用来存储:

key -> value

特点:

  • key 不能重复

  • value 可以重复

常见实现类:

类 特点


HashMap 最常用

LinkedHashMap 有序

TreeMap 排序

Hashtable 线程安全


HashMap

特点:

  • key 不重复

  • 允许一个 null key

  • 线程不安全

底层结构:

JDK7:数组 + 链表\ JDK8:数组 + 链表 + 红黑树

默认参数:

  • 初始容量:16

  • 负载因子:0.75

扩容条件:

size > capacity * 0.75


LinkedHashMap

特点:

  • 保证插入顺序

  • 底层:HashMap + 双向链表


TreeMap

特点:

  • 按 key 排序

  • 底层:红黑树


六、常见容器对比

集合                                     底层结构               特点


ArrayList                             数组                       查询快

LinkedList                           双向链表                增删快

HashSet                              HashMap               去重

TreeSet                               红黑树                    排序

HashMap                            数组+链表+红黑树    最常用

TreeMap                             红黑树                     key排序


七、如何选择容器

查询多:

ArrayList\ HashMap

增删多:

LinkedList

需要去重:

HashSet

需要排序:

TreeSet\ TreeMap

需要保持顺序:

LinkedHashSet\ LinkedHashMap


八、面试高频问题

ArrayList 和 LinkedList 区别

ArrayList LinkedList


数组 链表 查询快 查询慢 增删慢 增删快


HashMap 为什么快

原因:

利用 hash 直接定位数组位置,减少遍历。

平均时间复杂度:

O(1)


HashMap 为什么引入红黑树

当哈希冲突严重时链表会变长,查询效率下降。

JDK8 优化:

当链表长度 > 8 时转换为红黑树。

查询复杂度:

O(log n)


九、总结

Java 容器框架核心思想:

List -> 有序可重复\ Set -> 无序不重复\ Map -> 键值对

开发中最常用集合:

  • ArrayList

  • HashSet

  • HashMap

理解底层结构、时间复杂度和使用场景,对于写高效代码和技术面试都非常重要。

更多推荐