Java集合框架详解:List/Set/Map核心区别与选型指南(新手必背)
·
Java集合框架是面试和开发中高频考点,很多新手分不清List、Set、Map的区别,不知道什么时候该用ArrayList、LinkedList,什么时候该用HashSet、TreeSet。
今天用一张表+代码示例,把Java集合的核心知识点讲透,新手看完就能选型~
一、集合框架整体结构
Collection(根接口)
├─ List(有序、可重复)
│ ├─ ArrayList(数组实现,查询快、增删慢)
│ ├─ LinkedList(链表实现,增删快、查询慢)
│ └─ Vector(线程安全,低效,不推荐)
└─ Set(无序、不可重复)
├─ HashSet(哈希表实现,无序、唯一)
├─ TreeSet(红黑树实现,有序、唯一)
└─ LinkedHashSet(哈希表+链表,插入有序)
Map(键值对,键不可重复)
├─ HashMap(哈希表实现,无序、键唯一)
├─ TreeMap(红黑树实现,按键有序)
├─ LinkedHashMap(哈希表+链表,插入有序)
└─ Hashtable(线程安全,低效,不推荐)
二、核心接口对比
| 接口 | 有序性 | 重复性 | 底层实现 | 典型场景 |
|---|---|---|---|---|
| List | 有序(插入顺序) | 可重复 | 数组/链表 | 有序列表、队列 |
| Set | 无序/有序 | 不可重复 | 哈希表/红黑树 | 去重、集合运算 |
| Map | 无序/有序 | 键不可重复 | 哈希表/红黑树 | 键值对存储、字典 |
三、List接口实战
1. ArrayList(最常用)
import java.util.ArrayList;
import java.util.List;
public class ListDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
// 添加元素
list.add("张三");
list.add("李四");
list.add("张三"); // 可重复
// 遍历
for (String name : list) {
System.out.println(name);
}
// 获取元素
System.out.println(list.get(0)); // 张三
// 删除元素
list.remove(1);
}
}
2. LinkedList
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList<String> queue = new LinkedList<>();
// 队列操作(先进先出)
queue.addLast("A");
queue.addLast("B");
System.out.println(queue.removeFirst()); // A
}
}
四、Set接口实战
1. HashSet(去重)
import java.util.HashSet;
import java.util.Set;
public class SetDemo {
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(1); // 自动去重
System.out.println(set.size()); // 2
}
}
2. TreeSet(排序)
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet<Integer> set = new TreeSet<>();
set.add(3);
set.add(1);
set.add(2);
System.out.println(set); // [1,2,3](自动升序)
}
}
五、Map接口实战
import java.util.HashMap;
import java.util.Map;
public class MapDemo {
public static void main(String[] args) {
Map<String, Integer> score = new HashMap<>();
// 存储键值对
score.put("张三", 90);
score.put("李四", 85);
// 获取值
System.out.println(score.get("张三")); // 90
// 遍历
for (Map.Entry<String, Integer> entry : score.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
六、选型指南
-
需要有序列表、频繁查询 → 用
ArrayList -
需要频繁增删、队列/栈结构 → 用
LinkedList -
需要去重、无序存储 → 用
HashSet -
需要去重+排序 → 用
TreeSet -
需要键值对存储、无序 → 用
HashMap -
需要键值对+排序 → 用
TreeMap
总结
Java集合框架的核心是“接口定义规范,实现类提供具体功能”,新手先掌握List/Set/Map的区别和常用实现类,再深入理解底层数据结构(数组、链表、哈希表、红黑树)。
更多推荐




所有评论(0)