Java 集合
在 Java 编程中,集合框架(java.util
包)是处理一组对象的强大工具。与数组不同,集合提供了更灵活的数据存储和操作方式。本文将详细介绍 Java 集合框架的核心接口、常用实现类及其应用场景,帮助你更好地理解和使用集合。
1. 什么是集合?
集合是用于存储一组对象的容器。Java 集合框架提供了多种数据结构和算法,方便开发者对数据进行增删改查等操作。集合框架主要分为两大类:
Collection
接口:用于存储一组对象。Map
接口:用于存储键值对(key-value)。
2. 集合框架的核心接口
2.1 Collection
接口
Collection
是集合框架的根接口,它有三个主要的子接口:
List
:有序且允许重复元素的集合。Set
:无序且不允许重复元素的集合。Queue
:用于存储待处理元素的队列。
2.2 Map
接口
Map
用于存储键值对,键(key)是唯一的,值(value)可以重复。常见的实现类有 HashMap
、TreeMap
等。
3. 集合与数组的对比
特性 | 数组 | 集合 |
---|---|---|
容量 | 固定大小 | 动态扩展 |
数据类型 | 可以存储基本类型和引用类型 | 只能存储引用类型 |
功能 | 功能有限 | 提供丰富的操作方法 |
适用场景 | 数据量固定且简单 | 数据量动态变化且复杂 |
4. List
集合
List
是有序且允许重复元素的集合,常用的实现类有 ArrayList
和 LinkedList
。
4.1 ArrayList
ArrayList
是基于动态数组实现的,适合随机访问和遍历。
常用方法:
add(E e)
:添加元素。remove(int index)
:删除指定位置的元素。get(int index)
:获取指定位置的元素。set(int index, E element)
:修改指定位置的元素。
示例:
import java.util.ArrayList;
import java.util.List;
public class ArrayListDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");
System.out.println(list); // 输出: [Java, Python, C++]
}
}
4.2 LinkedList
LinkedList
是基于双向链表实现的,适合频繁的插入和删除操作。
常用方法:
addFirst(E e)
:在链表头部添加元素。addLast(E e)
:在链表尾部添加元素。removeFirst()
:删除链表头部的元素。removeLast()
:删除链表尾部的元素。
示例:
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("Java");
list.addFirst("Python");
list.addLast("C++");
System.out.println(list); // 输出: [Python, Java, C++]
}
}
5. Set
集合
Set
是无序且不允许重复元素的集合,常用的实现类有 HashSet
和 TreeSet
。
5.1 HashSet
HashSet
是基于哈希表实现的,适合快速查找和去重。
常用方法:
add(E e)
:添加元素。remove(Object o)
:删除元素。contains(Object o)
:判断是否包含指定元素。
示例:
import java.util.HashSet;
import java.util.Set;
public class HashSetDemo {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Java");
set.add("Python");
set.add("Java"); // 重复元素不会被添加
System.out.println(set); // 输出: [Java, Python]
}
}
5.2 TreeSet
TreeSet
是基于红黑树实现的,元素会按照自然顺序或自定义顺序排序。
示例:
import java.util.TreeSet;
import java.util.Set;
public class TreeSetDemo {
public static void main(String[] args) {
Set<String> set = new TreeSet<>();
set.add("Java");
set.add("Python");
set.add("C++");
System.out.println(set); // 输出: [C++, Java, Python]
}
}
6. Map
集合
Map
用于存储键值对,常用的实现类有 HashMap
和 TreeMap
。
6.1 HashMap
HashMap
是基于哈希表实现的,适合快速查找和插入。
常用方法:
put(K key, V value)
:添加键值对。get(Object key)
:根据键获取值。remove(Object key)
:删除指定键的映射。
示例:
import java.util.HashMap;
import java.util.Map;
public class HashMapDemo {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("Java", "编程语言");
map.put("Python", "脚本语言");
System.out.println(map.get("Java")); // 输出: 编程语言
}
}
6.2 TreeMap
TreeMap
是基于红黑树实现的,键会按照自然顺序或自定义顺序排序。
示例:
import java.util.TreeMap;
import java.util.Map;
public class TreeMapDemo {
public static void main(String[] args) {
Map<String, String> map = new TreeMap<>();
map.put("Java", "编程语言");
map.put("Python", "脚本语言");
map.put("C++", "系统编程语言");
System.out.println(map); // 输出: {C++=系统编程语言, Java=编程语言, Python=脚本语言}
}
}
7. 集合的应用场景
- 动态数据存储:当数据量不确定时,使用集合比数组更灵活。
- 去重:使用
Set
集合可以轻松实现数据去重。 - 键值对存储:使用
Map
集合可以方便地存储和查找键值对。 - 排序:使用
TreeSet
或TreeMap
可以实现元素的自动排序。
8. 小结
- 集合框架是 Java 中处理一组对象的强大工具,分为
Collection
和Map
两大类。 List
是有序且允许重复的集合,常用实现类有ArrayList
和LinkedList
。Set
是无序且不允许重复的集合,常用实现类有HashSet
和TreeSet
。Map
是键值对的集合,常用实现类有HashMap
和TreeMap
。