Java集合框架包含哪些内容,各有什么特性?
1 个回答
世间行乐亦如此,古来万事东流水。鬼木## 作用 Java 集合框架主要分为 **Collection** 和 **Map** 两大家族: - **Collection**:表示一组元素,主要包括: - **List**:有序、可重复,适合按索引访问。 - `ArrayList`:基于数组,随机访问为 O(1),适合读多写少。 - `LinkedList`:基于链表,头尾增删为 O(1),随机访问为 O(n),适合频繁两端增删且较少按索引访问。 - **Set**:不可重复,适合去重。 - `HashSet`:基于哈希,增删查通常为 O(1),无序。 - `TreeSet`:基于红黑树,操作约为 O(log n),元素有序。 - **Queue**:队列,用于按队列规则处理元素。 - **Map**:表示键值对映射,通过 key 查找 value。 - `HashMap`:基于哈希,通常 O(1) 查找,无序且非线程安全。 - `TreeMap`:基于红黑树,按键有序,操作约为 O(log n)。 - `ConcurrentHashMap`:线程安全,适合高并发场景。 - `CopyOnWriteArrayList`:适合并发读多写少的 List 场景。 ## 原理 - 集合选型的核心是根据访问特征取舍: - 随机访问多、读多写少:选 `ArrayList`。 - 频繁头尾插入删除、很少按索引访问:选 `LinkedList`。 - 只需要去重:选 `HashSet`。 - 去重并要求排序:选 `TreeSet`。 - 普通键值查找:选 `HashMap`。 - 要求 key 有序:选 `TreeMap`。 - 高并发键值访问:选 `ConcurrentHashMap`。 - 使用哈希集合或哈希映射时,作为 key 的对象应正确实现 `equals()` 和 `hashCode()`;放入集合后不要修改会影响哈希值的字段,否则可能出现查不到、删不掉等问题。 - 非线程安全集合不能直接用于高并发修改: - `ArrayList` 并发增删可能丢元素或抛出 `ConcurrentModificationException`。 - 旧版本 JDK 中并发使用 `HashMap` 还可能因链表环导致 CPU 占满。 - 多线程环境应使用并发集合或显式加锁。发布于 2026-10-28 10:36 •IP属地 湖南举报评论收藏
公众号进入网站体验更佳

