Java 集合框架概述

数组长度固定、只能存同种类型,写起业务来很不方便。Java 集合框架(Collection Framework)提供一组可动态增长、功能各异的容器,是日常开发中使用最频繁的工具库。

集合与数组的区别

对比项数组集合
长度固定,创建后不可变可变,可自动扩容
存储类型基本类型与对象只存对象(用包装类装基本类型)
便利方法很少增删查改、排序、遍历一应俱全

集合体系一览

整个框架分成两大分支:Collection(单元素)与 Map(键值对)。

Collection(接口)
├── List(有序可重复):ArrayList、LinkedList
├── Set(无序不可重复):HashSet、TreeSet
└── Queue(先进先出):LinkedList、PriorityQueue
Map(接口,键不可重复)
├── HashMap(哈希表,最常用)
└── TreeMap(按键排序)

List / Set / Queue 的区别

  • List:有序可重复,可按下标访问,如购物车清单。
  • Set:不允许重复元素,常用于去重,如已注册用户名。
  • Queue:队列,先进先出,多用于任务排队。

Map 键值对

Map 存"键 → 值"映射,通过键快速找值,如学号查学生。

// 片段需放进 main 方法中运行(文件顶部需 import java.util.*)
Map<String, Integer> map = new HashMap<>();
map.put("语文", 95);          // 存键值对
map.put("数学", 88);
System.out.println(map.get("语文"));   // 输出:95

泛型让集合更安全

用泛型指定元素类型,编译期就能防止放错类型,省去强转:

// 片段需放进 main 方法中运行(文件顶部需 import java.util.*)
List<String> list = new ArrayList<>();   // 只能放 String
list.add("Java");
// list.add(100);   // 编译报错:类型不符
String first = list.get(0);              // 取出即 String,无需强转
System.out.println(first);               // 输出:Java

迭代方式总览

集合没有下标,主要靠增强 for 与 Iterator 遍历:

// 片段需放进 main 方法中运行(文件顶部需 import java.util.*)
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
for (String s : list) {                  // 增强 for
    System.out.print(s + " ");           // 输出:A B
}
Iterator<String> it = list.iterator();   // 迭代器遍历
while (it.hasNext()) {
    System.out.print(it.next());         // 输出:AB
}

常用实现类对照表

需要选谁理由
频繁按下标访问ArrayList随机访问 O(1)
频繁在中间增删LinkedList链表插入删除快
元素去重且无序HashSet基于哈希,快
元素去重且要排序TreeSet红黑树自动排序
键值对快速查找HashMap哈希表 O(1) 级别
按键有序遍历TreeMap按键排序

Collections 工具类

与 Arrays 类似,Collections 提供操作集合的静态方法:sort 排序、reverse 反转、shuffle 打乱、max/min 求最值、copy 复制等。

// 片段需放进 main 方法中运行(文件顶部需 import java.util.*)
List<Integer> nums = new ArrayList<>();
nums.add(5);
nums.add(1);
nums.add(3);
Collections.sort(nums);                  // 升序排序
System.out.println(nums);                // 输出:[1, 3, 5]
System.out.println(Collections.max(nums));   // 输出:5

小结:集合框架的两大分支 Collection(List/Set/Queue)与 Map 覆盖了绝大多数数据组织需求;先按"要不要重复、要不要排序、是否键值对"选型,再用泛型声明,配合 Collections 工具类即可高效开发。

笔记加载中…