主题
Java 集合框架
Java 集合框架(Java Collections Framework)提供了一套完整的接口和类,用于存储和操作对象集合。它是 Java 编程中最重要的工具之一。
集合框架层次结构
Java 集合框架主要分为两大类:
- Collection 接口:存储单个元素的集合
- Map 接口:存储键值对的映射
Collection 接口
List(列表)
List 是有序的集合,允许重复元素。
ArrayList
基于数组实现的动态列表,随机访问性能好,但插入和删除操作较慢。
java
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("Java"); // 允许重复
// 遍历
for (String item : list) {
System.out.println(item);
}LinkedList
基于双向链表实现,插入和删除操作性能好,但随机访问较慢。
java
List<String> list = new LinkedList<>();
list.add("First");
list.add("Last");Set(集合)
Set 是不允许重复元素的集合。
HashSet
基于哈希表实现,无序,查找性能好。
java
Set<String> set = new HashSet<>();
set.add("Java");
set.add("Python");
set.add("Java"); // 重复元素不会被添加
System.out.println(set.size()); // 输出:2TreeSet
基于红黑树实现,有序(按自然顺序或比较器),查找性能好。
java
Set<Integer> set = new TreeSet<>();
set.add(3);
set.add(1);
set.add(2);
// 输出:[1, 2, 3],自动排序Map 接口
Map 存储键值对(key-value),键不能重复。
HashMap
基于哈希表实现,无序,查找性能好。
java
Map<String, Integer> map = new HashMap<>();
map.put("Java", 1);
map.put("Python", 2);
map.put("Java", 3); // 覆盖之前的值
System.out.println(map.get("Java")); // 输出:3TreeMap
基于红黑树实现,按键的自然顺序或比较器排序。
java
Map<String, Integer> map = new TreeMap<>();
map.put("Java", 1);
map.put("Python", 2);
map.put("C++", 3);
// 按键的字母顺序排序常用操作
遍历集合
java
// for-each 循环
for (String item : list) {
System.out.println(item);
}
// 迭代器
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
// Stream API(Java 8+)
list.stream().forEach(System.out::println);集合工具类 Collections
java
// 排序
Collections.sort(list);
// 反转
Collections.reverse(list);
// 查找
int index = Collections.binarySearch(list, "Java");选择集合类型
- 需要有序且允许重复:使用
ArrayList或LinkedList - 需要无序且不允许重复:使用
HashSet - 需要有序且不允许重复:使用
TreeSet - 需要键值对映射:使用
HashMap或TreeMap - 需要线程安全:使用
ConcurrentHashMap、CopyOnWriteArrayList等并发集合
总结
Java 集合框架提供了丰富的数据结构,选择合适的集合类型可以提高程序的性能和可读性。理解各种集合的特点和适用场景,是 Java 开发的基础技能。