Java集合框架
集合框架简介
Java集合框架(Java Collections Framework)是一组用于存储和操作对象的类和接口。它提供了常用的数据结构实现,如列表、集合、映射等。
集合框架的层次结构
// 集合框架的主要接口
Collection
├── List
│ ├── ArrayList
│ ├── LinkedList
│ └── Vector
├── Set
│ ├── HashSet
│ ├── TreeSet
│ └── LinkedHashSet
└── Queue
├── PriorityQueue
└── Deque
└── ArrayDeque
Map
├── HashMap
├── TreeMap
└── LinkedHashMap
List接口
List是一个有序的集合,可以包含重复元素。
// ArrayList示例
List fruits = new ArrayList<>();
fruits.add("苹果");
fruits.add("香蕉");
fruits.add("橙子");
// 访问元素
String firstFruit = fruits.get(0);
System.out.println("第一个水果:" + firstFruit);
// 修改元素
fruits.set(1, "葡萄");
// 删除元素
fruits.remove("橙子");
// 遍历List
for (String fruit : fruits) {
System.out.println(fruit);
}
// LinkedList示例
List numbers = new LinkedList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
// 在开头添加元素
numbers.add(0, 0);
// 在末尾添加元素
numbers.add(4);
Set接口
Set是一个不允许重复元素的集合。
// HashSet示例
Set colors = new HashSet<>();
colors.add("红色");
colors.add("绿色");
colors.add("蓝色");
colors.add("红色"); // 重复元素不会被添加
// 检查元素是否存在
boolean containsRed = colors.contains("红色");
// 删除元素
colors.remove("绿色");
// 遍历Set
for (String color : colors) {
System.out.println(color);
}
// TreeSet示例(有序集合)
Set numbers = new TreeSet<>();
numbers.add(5);
numbers.add(2);
numbers.add(8);
numbers.add(1);
// 自动排序
for (Integer number : numbers) {
System.out.println(number);
}
Map接口
Map是一个键值对的集合,每个键最多映射到一个值。
// HashMap示例
Map scores = new HashMap<>();
scores.put("张三", 85);
scores.put("李四", 92);
scores.put("王五", 78);
// 获取值
int zhangScore = scores.get("张三");
System.out.println("张三的分数:" + zhangScore);
// 检查键是否存在
boolean containsLi = scores.containsKey("李四");
// 删除键值对
scores.remove("王五");
// 遍历Map
for (Map.Entry entry : scores.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
// TreeMap示例(按键排序)
Map countries = new TreeMap<>();
countries.put("USA", "美国");
countries.put("UK", "英国");
countries.put("China", "中国");
// 按键顺序遍历
for (String code : countries.keySet()) {
System.out.println(code + ": " + countries.get(code));
}
Queue接口
Queue是一个先进先出(FIFO)的集合。
// PriorityQueue示例
Queue numbers = new PriorityQueue<>();
numbers.offer(5);
numbers.offer(2);
numbers.offer(8);
numbers.offer(1);
// 获取并移除队首元素
while (!numbers.isEmpty()) {
System.out.println(numbers.poll());
}
// Deque示例(双端队列)
Deque deque = new ArrayDeque<>();
deque.addFirst("第一个");
deque.addLast("最后一个");
deque.addFirst("新的第一个");
// 从两端访问元素
System.out.println("第一个元素:" + deque.getFirst());
System.out.println("最后一个元素:" + deque.getLast());
Collections工具类
Collections类提供了许多操作集合的静态方法。
List numbers = new ArrayList<>();
numbers.add(5);
numbers.add(2);
numbers.add(8);
numbers.add(1);
// 排序
Collections.sort(numbers);
System.out.println("排序后:" + numbers);
// 反转
Collections.reverse(numbers);
System.out.println("反转后:" + numbers);
// 随机打乱
Collections.shuffle(numbers);
System.out.println("打乱后:" + numbers);
// 查找最大最小值
int max = Collections.max(numbers);
int min = Collections.min(numbers);
System.out.println("最大值:" + max + ", 最小值:" + min);
// 填充
Collections.fill(numbers, 0);
System.out.println("填充后:" + numbers);
实践练习
练习1:学生成绩管理系统
public class Student {
private String name;
private int score;
// 实现学生类
}
public class GradeManager {
private Map> grades;
// 实现成绩管理系统
}