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)

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

相关推荐
我今晚不熬夜几秒前
JSON在java中的使用
java·开发语言·json
LiuYiCheng12345630 分钟前
Python游戏开发:Pygame全面指南与实战
python·pygame
Code季风40 分钟前
Spring 异常处理最佳实践:从基础配置到生产级应用
java·spring boot·spring
回家路上绕了弯41 分钟前
Java 堆深度解析:内存管理的核心战场
java·jvm
Code季风41 分钟前
Spring IoC 容器性能提升指南:启动速度与运行效率优化策略
java·spring·性能优化
魔障阿Q42 分钟前
华为310P3模型转换及python推理
人工智能·python·深度学习·yolo·计算机视觉·华为
谦行1 小时前
前端视角 Java Web 入门手册 5.10:真实世界 Web 开发—— 单元测试
java·spring boot·后端
hhua01231 小时前
理解“无界队列”与“有界队列”及其适用场景
java·队列
LZQqqqqo1 小时前
C# 接口(interface 定义接口的关键字)
java·开发语言·c#