当前位置: 首页 > news >正文

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


一、单列集合(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)

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

相关文章:

  • 腾讯云-人脸核身+人脸识别教程
  • 现代计算机图形学Games101入门笔记(三)
  • FastByteArrayOutputStream和ByteArrayInputStream有什么区别
  • 【Linux笔记】——Linux线程理解与分页存储的奥秘
  • 【LeetCode 热题 100】反转链表 / 回文链表 / 有序链表转换二叉搜索树 / LRU 缓存
  • 家用或办公 Windows 电脑玩人工智能开源项目配备核显的必要性(含 NPU 及显卡类型补充)
  • 滑动窗口算法笔记
  • Milvus 视角看主流嵌入式模型(Embeddings)
  • MongoDB入门
  • 《AI大模型应知应会100篇》第63篇:AutoGPT 与 BabyAGI:自主代理框架探索
  • Centos 上安装Klish(clish)的编译和测试总结
  • 大数据开发 hadoop集群 3.Hadoop运行环境搭建
  • PinkWallet如何打通数字资产与传统金融的最后一公里
  • 嵌入式Linux Qt开发:1、搭建基于ubuntu18.04的Qt开发环境及测试(解决Qt creator输入法问题)
  • javaScript简单版
  • Linux——mysql主从复制与读写分离
  • 为什么 Linux 上默认没有 host.docker.internal
  • MySQL基础原理
  • 赋能数据报告:解锁智能化分析建议新姿势
  • Llama:开源的急先锋
  • 鄂州交警通报致1死2伤车祸:女子操作不当引发,已被刑拘
  • “一百零一个愿望——汉字艺术展”亮相意大利威尼斯
  • 中国海警舰艇编队5月14日在我钓鱼岛领海巡航
  • 这个“超强致癌细菌”,宝宝感染率高达40%,预防却很简单
  • 西王食品连亏三年:主业齐“崩”,研发人员多为专科生
  • 万科:存续债券均正常付息兑付