Java 集合框架对比全解析:单列集合 vs 双列集合


一、单列集合(Collection)体系详解

根据图片内容扩展后的完整结构:

latex 复制代码
父接口:Collection  
├── **子接口:Set**(无序、无索引、元素唯一)  
│   ├── HashSet      (基于哈希表,快速访问)  
│   └── TreeSet      (基于红黑树,自然排序)  
│  
└── **子接口:List**(有序、有索引、元素可重复)  
    ├── ArrayList    (动态数组,随机访问快)  
    └── LinkedList   (双向链表,增删效率高)  
1. Set 与 List 的对比
特性 Set List
元素顺序 无序 有序(按插入顺序或索引)
索引访问 不支持 get(index) 支持 get(0), set(1, value)
元素唯一性 唯一(依赖 equals()hashCode() 可重复
典型实现类 HashSet, TreeSet ArrayList, LinkedList

示例代码

java 复制代码
// Set 示例(去重)
Set<String> cities = new HashSet<>();
cities.add("北京");
cities.add("上海");
cities.add("北京");  // 重复元素被忽略
System.out.println(cities);  // 输出 [北京, 上海]

// List 示例(保留顺序和重复)
List<String> list = new ArrayList<>();
list.add("苹果");
list.add("香蕉");
list.add("苹果");  // 允许重复
System.out.println(list.get(0));  // 输出 "苹果"

二、双列集合(Map)核心特点
latex 复制代码
父接口:Map  
├── HashMap       (无序,基于哈希表)  
├── LinkedHashMap (按插入顺序)  
└── TreeMap       (按键自然排序)  
Map 与 Collection 的对比
维度 单列集合(Collection) 双列集合(Map)
存储方式 存储单个对象(如 String, Integer 存储键值对(Key-Value)
元素访问 通过索引(List)或迭代器(Set) 通过键(Key)直接访问值(Value)
唯一性约束 Set 中元素唯一;List 允许重复 键(Key)唯一,值(Value)可重复
常见应用场景 存储列表、去重、有序数据 缓存、配置管理、统计键值对数据

示例代码

java 复制代码
// Map 示例(键值对存储)
Map<String, Integer> productPrices = new HashMap<>();
productPrices.put("手机", 5000);
productPrices.put("笔记本", 8000);
productPrices.put("手机", 6000);  // 覆盖旧值
System.out.println(productPrices.get("手机"));  // 输出 6000

三、结合使用场景对比
1. 单列集合典型场景
  • Set
java 复制代码
Set<String> set1 = new HashSet<>(Arrays.asList("A", "B", "C"));  
Set<String> set2 = new HashSet<>(Arrays.asList("B", "C", "D"));  
set1.retainAll(set2);  // 交集:结果为 ["B", "C"]
复制代码
- 去重(如统计不重复的 IP 地址)  
- 集合运算(并集、交集)
  • List
java 复制代码
List<User> users = userDao.findByPage(1, 10);  // 获取第1页的10条数据
复制代码
- 分页查询结果(有序)  
- 需要频繁按索引操作的场景
2. 双列集合典型场景
  • Map
java 复制代码
Map<String, Integer> wordCount = new HashMap<>();  
for (String word : words) {  
    wordCount.put(word, wordCount.getOrDefault(word, 0) + 1);  
}  
复制代码
- 缓存用户信息(Key=用户ID,Value=用户对象)  
- 统计词频(Key=单词,Value=出现次数)

四、联动使用:单列集合 + Map

场景:从数据库查询订单列表(List),转换为按订单ID快速查找的 Map。

java 复制代码
// 1. 查询订单列表(单列集合)
List<Order> orders = orderDao.findAll();

// 2. 转换为 Map(双列集合)
Map<Long, Order> orderMap = new HashMap<>();
for (Order order : orders) {
    orderMap.put(order.getId(), order);  // Key=订单ID,Value=订单对象
}

// 3. 快速查找订单
Order order1001 = orderMap.get(1001L);

五、总结对比图
特性 Set List Map
核心用途 去重 有序列表 键值对映射
元素唯一性 唯一 可重复 键唯一,值可重复
顺序性 无序 有序 无序或有序(取决于实现类)
访问方式 迭代器 索引 键(Key)

通过理解单列与双列集合的差异,可以更精准地选择数据结构,提升代码效率和可读性。

相关推荐
陈果然DeepVersion1 小时前
Java大厂面试真题:Spring Boot+Kafka+AI智能客服场景全流程解析(十)
java·spring boot·ai·kafka·面试题·向量数据库·rag
读研的武2 小时前
DashGo零基础入门 纯Python的管理系统搭建
开发语言·python
Andy2 小时前
Python基础语法4
开发语言·python
但要及时清醒2 小时前
ArrayList和LinkedList
java·开发语言
一叶飘零_sweeeet2 小时前
从测试小白到高手:JUnit 5 核心注解 @BeforeEach 与 @AfterEach 的实战指南
java·junit
摇滚侠2 小时前
Spring Boot3零基础教程,Reactive-Stream 四大核心组件,笔记106
java·spring boot·笔记
Z3r4y2 小时前
【代码审计】RuoYi-3.0 三处安全问题分析
java·web安全·代码审计·ruoyi-3.0
mm-q29152227292 小时前
Python+Requests零基础系统掌握接口自动化测试
开发语言·python