Java中的集合框架(Collection Framework)是一个用于存储和操作数据元素的类和接口的集合。它提供了一组标准的数据结构(如列表、集合和映射),并定义了一些操作(如添加、删除、遍历等)。以下是对Java集合框架的详细讲解,包含具体的代码示例。
1. List接口
List接口是一个有序的集合,它允许重复元素。主要实现类有ArrayList、LinkedList和Vector。
ArrayList
ArrayList是一个动态数组,它提供了基于索引的快速访问。
import java.util.ArrayList;
import java.util.List;
public class ArrayListExample {
public static void main(String[] args) {
List<String> arrayList = new ArrayList<>();
// 添加元素
arrayList.add("Apple");
arrayList.add("Banana");
arrayList.add("Cherry");
// 插入元素
arrayList.add(1, "Orange");
// 获取元素
String fruit = arrayList.get(2);
System.out.println("Element at index 2: " + fruit);
// 遍历元素
for (String item : arrayList) {
System.out.println(item);
}
}
}
LinkedList
LinkedList是一个双向链表,适合频繁插入和删除操作。
import java.util.LinkedList;
import java.util.List;
public class LinkedListExample {
public static void main(String[] args) {
List<String> linkedList = new LinkedList<>();
// 添加元素
linkedList.add("Dog");
linkedList.add("Cat");
linkedList.add("Cow");
// 删除元素
linkedList.remove("Cat");
// 遍历元素
for (String animal : linkedList) {
System.out.println(animal);
}
}
}
2. Set接口
Set接口是一个不允许重复元素的集合。主要实现类有HashSet、LinkedHashSet和TreeSet。
HashSet
HashSet是一个基于哈希表的实现,不保证集合的顺序。
import java.util.HashSet;
import java.util.Set;
public class HashSetExample {
public static void main(String[] args) {
Set<String> hashSet = new HashSet<>();
// 添加元素
hashSet.add("Red");
hashSet.add("Green");
hashSet.add("Blue");
// 添加重复元素
hashSet.add("Red"); // 不会添加
// 遍历元素
for (String color : hashSet) {
System.out.println(color);
}
}
}
TreeSet
TreeSet是一个有序的集合,它基于红黑树实现,元素会按自然顺序排序。
import java.util.Set;
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
Set<String> treeSet = new TreeSet<>();
// 添加元素
treeSet.add("Banana");
treeSet.add("Apple");
treeSet.add("Mango");
// 遍历元素(按自然顺序)
for (String fruit : treeSet) {
System.out.println(fruit);
}
}
}
3. Map接口
Map接口是一个键值对的集合。主要实现类有HashMap、LinkedHashMap和TreeMap。
HashMap
HashMap是一个基于哈希表的实现,允许使用null键和null值,不保证顺序。
import java.util.HashMap;
import java.util.Map;
public class HashMapExample {
public static void main(String[] args) {
Map<String, Integer> hashMap = new HashMap<>();
// 添加键值对
hashMap.put("One", 1);
hashMap.put("Two", 2);
hashMap.put("Three", 3);
// 获取值
int value = hashMap.get("Two");
System.out.println("Value for key 'Two': " + value);
// 遍历键值对
for (Map.Entry<String, Integer> entry : hashMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
TreeMap
TreeMap是一个有序的键值对集合,基于红黑树实现,键会按自然顺序排序。
import java.util.Map;
import java.util.TreeMap;
public class TreeMapExample {
public static void main(String[] args) {
Map<String, Integer> treeMap = new TreeMap<>();
// 添加键值对
treeMap.put("C", 3);
treeMap.put("A", 1);
treeMap.put("B", 2);
// 遍历键值对(按键的自然顺序)
for (Map.Entry<String, Integer> entry : treeMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
4. Queue接口
Queue接口是一种先进先出的集合。主要实现类有LinkedList和PriorityQueue。
LinkedList作为Queue使用
LinkedList实现了Queue接口,可以作为队列使用。
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<>();
// 添加元素
queue.offer("First");
queue.offer("Second");
queue.offer("Third");
// 获取并移除队头元素
String head = queue.poll();
System.out.println("Head of the queue: " + head);
// 遍历队列
for (String element : queue) {
System.out.println(element);
}
}
}
5. Deque接口
Deque接口是一个双端队列,支持在两端插入和移除元素。主要实现类有LinkedList和ArrayDeque。
ArrayDeque
ArrayDeque是一个基于数组的双端队列。
import java.util.ArrayDeque;
import java.util.Deque;
public class DequeExample {
public static void main(String[] args) {
Deque<String> deque = new ArrayDeque<>();
// 添加元素到队头
deque.offerFirst("First");
deque.offerFirst("Second");
// 添加元素到队尾
deque.offerLast("Third");
// 获取并移除队头元素
String head = deque.pollFirst();
System.out.println("Head of the deque: " + head);
// 获取并移除队尾元素
String tail = deque.pollLast();
System.out.println("Tail of the deque: " + tail);
// 遍历双端队列
for (String element : deque) {
System.out.println(element);
}
}
}
通过上述代码示例,涵盖了Java集合框架中主要接口和实现类的使用方法。学习和掌握这些集合类,可以有效地处理各种数据结构和算法问题。