Java 核心类库 (Standard Edition API)
目录
集合框架是 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. 进阶:如何选择合适的集合?
在开发中,你可以参考以下逻辑:
-
是否需要存储键值对?
-
是:用
Map(首选HashMap)。
-
-
是否允许重复?
-
是:用
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 开发的“入门门槛”。
更多推荐




所有评论(0)