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

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印


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

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

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

示例代码

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

示例代码

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

三、结合使用场景对比
1. 单列集合典型场景
  • Set
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
List<User> users = userDao.findByPage(1, 10);  // 获取第1页的10条数据
- 分页查询结果(有序)  
- 需要频繁按索引操作的场景
2. 双列集合典型场景
  • Map
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。

// 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);

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

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

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yrui.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值