目录

1. 集合体系全景图

2. List 接口:有序、可重复

3. Set 接口:唯一、无序

4. Map 接口:映射关系

5. 核心工具类:Collections & Arrays

6. 进阶:如何选择合适的集合?

代码:利用集合处理复杂业务

总结


集合框架是 Java 提供的一套用于存储和操作对象组的统一接口和类。相比于传统的数组,集合的长度是可变的,且提供了丰富的数据结构实现。

1. 集合体系全景图

Java 集合主要分为两大派系:

  • Collection 接口:存储一组单值对象。

  • Map 接口:存储键值对(Key-Value)。


2. List 接口:有序、可重复

List 是最常用的集合类型,它保证了元素的插入顺序。

  • ArrayList (最常用):

    • 底层:动态数组。

    • 特点:查询极快(通过索引),但中间插入和删除较慢(需要移动元素)。

    • 扩容机制:默认初始容量为 10,当空间不足时,会创建一个约为原容量 1.5 倍的新数组并进行拷贝。

  • LinkedList

    • 底层:双向链表。

    • 特点:增删快,查询慢。此外,它还实现了 Deque 接口,可以作为栈或队列使用。


3. Set 接口:唯一、无序

Set 用于保证元素的唯一性,它不接受重复元素。

  • HashSet

    • 底层:基于 HashMap 实现。

    • 原理:存入元素时,先计算 hashCode() 确定桶位,再通过 equals() 判断内容是否相同。

  • TreeSet

    • 特点:元素有序(自然排序或指定比较器)。底层使用红黑树,适合需要频繁排序的场景。


4. Map 接口:映射关系

Map 不继承自 Collection,它存储的是一种映射。

  • HashMap (面试重灾区):

    • 底层结构:数组 + 链表 + 红黑树(Java 8+)。

    • 机制:当链表长度超过 8 且数组长度达到 64 时,链表会转为红黑树以提高查询效率。

  • ConcurrentHashMap

    • 特点:线程安全的 HashMap。它不使用全局锁,而是采用分段锁(Java 7)或 CAS + synchronized(Java 8+),性能远超 Hashtable


5. 核心工具类:Collections & Arrays

Java 提供了两个非常好用的静态工具类:

  • java.util.Collections:提供排序 (sort)、查找 (binarySearch)、洗牌 (shuffle) 和将集合转为不可变/线程安全版本的方法。

  • java.util.Arrays:用于操作数组,如 Arrays.asList() (将数组转为集合) 或 Arrays.sort()


6. 进阶:如何选择合适的集合?

在开发中,你可以参考以下逻辑:

  1. 是否需要存储键值对?

    • 是:用 Map (首选 HashMap)。

  2. 是否允许重复?

    • 是:用 List

      • 查询多:用 ArrayList

      • 增删多:用 LinkedList

    • 否:用 Set

      • 没排序要求:用 HashSet

      • 需要排序:用 TreeSet


代码:利用集合处理复杂业务

假设我们要统计一段文本中每个单词出现的次数,并按顺序输出:

import java.util.*;

public class WordCounter {
    public static void main(String[] args) {
        String text = "java python java c++ java python go";
        String[] words = text.split(" ");

        // 1. 使用 HashMap 统计词频
        Map<String, Integer> countMap = new HashMap<>();
        for (String word : words) {
            countMap.put(word, countMap.getOrDefault(word, 0) + 1);
        }

        // 2. 将结果存入 TreeMap 自动按字母排序
        TreeMap<String, Integer> sortedMap = new TreeMap<>(countMap);

        // 3. 遍历输出
        System.out.println("单词统计结果:");
        sortedMap.forEach((k, v) -> System.out.println(k + ": " + v));
    }
}

总结

集合框架不仅是数据的容器,更是算法思想的体现。理解了 ArrayList 的扩容和 HashMap 的哈希碰撞,你就真正跨过了 Java 开发的“入门门槛”。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐