Java 集合概述
Java 集合框架是 Java 提供的一组用于存储和操作数据的类和接口。集合框架可以方便地进行数据存储、查询、插入和删除等操作。它提供了一些接口和实现类,使得开发者能够灵活处理数据结构。
Java 集合框架的核心接口包括:Collection
, Set
, List
, Queue
, Map
等。每个接口有多个具体实现类,如 ArrayList
, HashSet
, LinkedList
, HashMap
等。
1. Collection 接口
Collection
是 Java 集合框架的根接口,所有的集合类都直接或间接地实现了它。Collection
接口有两种常见的子接口:List
和 Set
,分别用于有序集合和无序集合。
2. List 接口
List
是有序集合,允许重复元素。List
中的元素可以按照插入的顺序进行访问。
2.1 常见实现类:
- ArrayList:基于动态数组实现,查询效率高,插入和删除效率低。
- LinkedList:基于双向链表实现,插入和删除效率高,查询效率低。
- Vector:与
ArrayList
类似,但它是线程安全的,性能相对较低。
2.2 示例:使用 ArrayList
import java.util.*;
public class ListExample {
public static void main(String[] args) {
// 创建一个 ArrayList
List<String> list = new ArrayList<>();
// 添加元素
list.add("Apple");
list.add("Banana");
list.add("Cherry");
// 遍历列表
for (String item : list) {
System.out.println(item);
}
// 根据索引获取元素
System.out.println("Element at index 1: " + list.get(1));
// 删除元素
list.remove("Banana");
System.out.println("After removal: " + list);
// 获取元素的索引
int index = list.indexOf("Cherry");
System.out.println("Index of 'Cherry': " + index);
}
}
在这个例子中,ArrayList
用于存储字符串,并演示了常见的操作,如添加、获取、删除和查找元素。
3. Set 接口
Set
是无序集合,不允许重复元素。常见的实现类有 HashSet
, LinkedHashSet
, TreeSet
等。
3.1 常见实现类:
- HashSet:基于哈希表实现,元素无序,查找速度快,不允许重复元素。
- LinkedHashSet:与
HashSet
类似,但保留元素的插入顺序。 - TreeSet:基于红黑树实现,元素按自然顺序排序。
3.2 示例:使用 HashSet
import java.util.*;
public class SetExample {
public static void main(String[] args) {
// 创建一个 HashSet
Set<String> set = new HashSet<>();
// 添加元素
set.add("Apple");
set.add("Banana");
set.add("Cherry");
// 尝试添加重复元素
set.add("Apple");
// 遍历集合
for (String item : set) {
System.out.println(item);
}
// 判断元素是否存在
boolean contains = set.contains("Banana");
System.out.println("Contains 'Banana': " + contains);
// 删除元素
set.remove("Cherry");
System.out.println("After removal: " + set);
}
}
在这个示例中,HashSet
存储了多个水果名称,并演示了集合的添加、查找和删除操作。注意,重复元素 "Apple"
被自动忽略。
4. Map 接口
Map
是一个键值对集合,不同于 Collection
接口,Map
存储的是键值对(key-value)。Map
中的每个键都是唯一的,但值可以重复。
4.1 常见实现类:
- HashMap:基于哈希表实现,键值对存储无序,查找速度快。
- LinkedHashMap:与
HashMap
类似,但按照插入顺序保留键值对。 - TreeMap:基于红黑树实现,键值对按键的自然顺序排序。
4.2 示例:使用 HashMap
import java.util.*;
public class MapExample {
public static void main(String[] args) {
// 创建一个 HashMap
Map<String, Integer> map = new HashMap<>();
// 添加键值对
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Cherry", 3);
// 获取值
System.out.println("Apple's value: " + map.get("Apple"));
// 遍历 Map
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
// 删除键值对
map.remove("Banana");
System.out.println("After removal: " + map);
// 判断 Map 中是否包含特定的键
boolean containsKey = map.containsKey("Cherry");
System.out.println("Contains 'Cherry' key: " + containsKey);
}
}
在这个例子中,HashMap
用于存储水果名称和对应的数量,并展示了常见的操作,如插入、获取、遍历和删除键值对。
5. Queue 接口
Queue
是一个用于存储元素的集合,遵循 FIFO(先入先出)原则。常见的实现类有 LinkedList
, PriorityQueue
等。
5.1 常见实现类:
- LinkedList:基于双向链表实现,支持队列操作(
offer()
,poll()
,peek()
)。 - PriorityQueue:基于优先级队列实现,元素按自然顺序或自定义排序。
5.2 示例:使用 LinkedList 实现 Queue
import java.util.*;
public class QueueExample {
public static void main(String[] args) {
// 创建一个 LinkedList 作为 Queue
Queue<String> queue = new LinkedList<>();
// 添加元素
queue.offer("Apple");
queue.offer("Banana");
queue.offer("Cherry");
// 获取并移除队首元素
System.out.println("Poll: " + queue.poll());
// 查看队首元素
System.out.println("Peek: " + queue.peek());
// 遍历队列
System.out.println("Queue contents: ");
for (String item : queue) {
System.out.println(item);
}
}
}
在这个例子中,LinkedList
被用作队列,演示了队列的基本操作,包括元素的添加、查看和删除。
6. 常见操作:
6.1 判断集合是否为空
Set<String> set = new HashSet<>();
if (set.isEmpty()) {
System.out.println("Set is empty.");
}
6.2 获取集合的大小
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
System.out.println("List size: " + list.size());
6.3 清空集合
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.clear(); // 清空集合
System.out.println("Set after clear: " + set);
7. 总结
Java 集合框架提供了多种不同类型的集合接口和实现类,开发者可以根据实际需求选择最合适的集合类。集合框架不仅支持常见的增、删、查、改等操作,还为性能优化、线程安全、排序等场景提供了不同的解决方案。
- List:有序集合,允许重复元素。常用实现:
ArrayList
,LinkedList
。 - Set:无序集合,不允许重复元素。常用实现:
HashSet
,LinkedHashSet
,TreeSet
。 - Map:键值对集合,键唯一,值可重复。常用实现:
HashMap
,LinkedHashMap
,TreeMap
。 - Queue:遵循 FIFO(先入先出)原则的集合。常用实现:
LinkedList
,PriorityQueue
。
选择合适的集合类,可以让代码更加高效、简洁。
来一杯咖啡,聊聊Java的碎碎念呀