Java 学习系列(14):Java 集合框架详解
1. Java 集合框架概述
Java 集合框架是 Java 提供的一组数据结构和算法的集合,主要用于存储和操作数据。集合框架提供了多种常用的数据结构,如列表、集合、映射等。它能够简化数据存储、访问、处理等操作。
集合框架主要分为 List、Set、Queue、Map 四大接口,并提供了多个实现类。我们将逐一介绍这些接口及其实现类。
2. List 接口
List 是一个有序集合,允许元素重复,并且支持通过索引访问元素。
2.1 常用实现类
ArrayList:基于动态数组实现,支持快速随机访问。LinkedList:基于双向链表实现,适用于频繁插入和删除操作。
2.2 示例代码
import java.util.*;
public class ListExample {
public static void main(String[] args) {
// 创建一个ArrayList
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");
// 通过索引访问元素
System.out.println("第一个元素: " + list.get(0));
// 输出列表
for (String lang : list) {
System.out.println(lang);
}
}
}
2.3 LinkedList 示例
import java.util.*;
public class LinkedListExample {
public static void main(String[] args) {
// 创建一个LinkedList
LinkedList<String> list = new LinkedList<>();
list.add("Java");
list.add("Python");
list.add("C++");
// 在列表开头插入元素
list.addFirst("JavaScript");
// 输出列表
for (String lang : list) {
System.out.println(lang);
}
}
}
3. Set 接口
Set 是一个不允许重复元素的集合。它不保证元素的顺序。
3.1 常用实现类
HashSet:基于哈希表实现,操作速度较快。LinkedHashSet:基于哈希表和链表实现,保证元素插入的顺序。TreeSet:基于红黑树实现,自动对元素进行排序。
3.2 示例代码
import java.util.*;
public class SetExample {
public static void main(String[] args) {
// 创建一个HashSet
Set<String> set = new HashSet<>();
set.add("Java");
set.add("Python");
set.add("C++");
set.add("Java"); // 重复的元素会被忽略
// 输出集合
for (String lang : set) {
System.out.println(lang);
}
}
}
3.3 TreeSet 示例
import java.util.*;
public class TreeSetExample {
public static void main(String[] args) {
// 创建一个TreeSet
Set<String> set = new TreeSet<>();
set.add("Java");
set.add("Python");
set.add("C++");
// 输出自动排序后的集合
for (String lang : set) {
System.out.println(lang);
}
}
}
4. Queue 接口
Queue 是一种先进先出(FIFO)的数据结构。常用于处理排队任务等。
4.1 常用实现类
LinkedList:实现了Queue接口,支持队列操作。PriorityQueue:基于优先级堆实现的队列,队列中的元素会根据优先级排序。
4.2 示例代码
import java.util.*;
public class QueueExample {
public static void main(String[] args) {
// 创建一个LinkedList作为队列
Queue<String> queue = new LinkedList<>();
queue.offer("Java");
queue.offer("Python");
queue.offer("C++");
// 输出队列并移除元素
while (!queue.isEmpty()) {
System.out.println("队列头部: " + queue.poll());
}
}
}
4.3 PriorityQueue 示例
import java.util.*;
public class PriorityQueueExample {
public static void main(String[] args) {
// 创建一个PriorityQueue
Queue<Integer> queue = new PriorityQueue<>();
queue.offer(10);
queue.offer(30);
queue.offer(20);
// 输出队列并移除元素
while (!queue.isEmpty()) {
System.out.println("队列头部: " + queue.poll());
}
}
}
5. Map 接口
Map 是一个键值对集合,其中每个键只能对应一个值。常用于存储关联数据。
5.1 常用实现类
HashMap:基于哈希表实现,操作速度较快。LinkedHashMap:基于哈希表和链表实现,保持插入顺序。TreeMap:基于红黑树实现,自动对键进行排序。
5.2 示例代码
import java.util.*;
public class MapExample {
public static void main(String[] args) {
// 创建一个HashMap
Map<String, String> map = new HashMap<>();
map.put("Java", "编程语言");
map.put("Python", "编程语言");
map.put("C++", "编程语言");
// 输出键值对
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
5.3 TreeMap 示例
import java.util.*;
public class TreeMapExample {
public static void main(String[] args) {
// 创建一个TreeMap
Map<Integer, String> map = new TreeMap<>();
map.put(3, "Java");
map.put(1, "Python");
map.put(2, "C++");
// 输出自动排序后的键值对
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
6. 集合的遍历方式
Java 集合框架提供了多种遍历集合的方式:
- 增强的 for 循环:适用于 List、Set、Map 的遍历。
- Iterator:通过
Iterator接口进行遍历。 - forEach:Java 8 引入的 Lambda 表达式遍历。
6.1 使用增强的 for 循环
List<String> list = Arrays.asList("Java", "Python", "C++");
for (String lang : list) {
System.out.println(lang);
}
6.2 使用 Iterator
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
6.3 使用 forEach(Java 8)
list.forEach(lang -> System.out.println(lang));
7. 总结
- List:有序集合,允许重复元素,常用实现类包括
ArrayList和LinkedList。 - Set:不允许重复元素,常用实现类包括
HashSet、LinkedHashSet和TreeSet。 - Queue:队列,常用于存储需要按顺序处理的元素,常用实现类包括
LinkedList和PriorityQueue。 - Map:键值对集合,常用实现类包括
HashMap、LinkedHashMap和TreeMap。
下一期:《Java 学习系列(15):Java 8 新特性详解》
1万+

被折叠的 条评论
为什么被折叠?



