List、Set、Map 作为最基础也最常用的三种集合类型,各自有着鲜明的特性和适用场景。本文梳理清楚它们的区别、用法和最佳实践,在开发中选对集合、少走弯路。
一、集合的本质
Java 集合框架的核心目的是存储、管理和操作一组对象,相比数组,集合支持动态扩容、提供丰富的操作方法(增删改查、排序、筛选等),是处理批量数据的首选。
List、Set 属于集合接口的子接口,而 Map 是独立的顶级接口(存储键值对),三者的核心差异体现在元素是否有序、是否允许重复上:
| 集合类型 | 核心特征 | 是否允许重复元素 | 是否有序 | 核心实现类 |
|---|---|---|---|---|
| List | 有序可重复 | 是 | 插入有序(索引有序) | ArrayList、LinkedList |
| Set | 无序不可重复 | 否 | 无序(HashSet)/ 有序(TreeSet) | HashSet、TreeSet、LinkedHashSet |
| Map | 键值对存储,键唯一 | 值可重复、键不可 | 无序(HashMap)/ 有序(TreeMap) | HashMap、TreeMap、LinkedHashMap |
二、特性 + 用法 + 场景
1. List:有序可重复的'动态数组'
List 的核心是有序性(按插入顺序保存,可通过索引访问)和可重复性(允许元素重复),就像我们日常用的'待办清单',可以按顺序查看、修改指定位置的内容。
import java.util.ArrayList;
import java.util.List;
public class ListDemo {
public static void main(String[] args) {
// 推荐使用接口声明,实现类实例化(面向接口编程)
List<String> fruitList = new ArrayList<>();
// 1. 添加元素
fruitList.add("苹果");
fruitList.add("香蕉");
fruitList.add("苹果"); // 允许重复添加
// 2. 按索引访问元素
System.out.println("索引 1 的元素:" + fruitList.get(1)); // 输出:香蕉
fruitList.set(, );
(String fruit : fruitList) {
System.out.println(fruit);
}
fruitList.remove();
}
}

