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;
    
    // 实现成绩管理系统
}