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

实用指南:Java集合大调研

一、集合框架的层次结构

1.1.接口介绍

  1.1.1.Collection 接口

        Collection接口:是 ListSet Queue接口的父接口,它定义了基本的集合操作,如添加、删除、遍历等。

  • List 接口:有序集合(序列),元素可以重复。常见实现类有ArrayListLinkedListVector(线程安全)。

  • Set接口:不包含重复元素的集合。常见实现类有 HashSetLinkedHashSetTreeSet

  • Queue 接口:队列,通常用于存储元素。常见实现类有LinkedListPriorityQueue

  1.1.2.Map 接口

Map 接口:不继承自Collection,它用于存储键值对(key-value)。键不能重复,每个键最多映射到一个值。常见实现类有HashMapLinkedHashMapTreeMapHashtable(线程安全)。

1.2.主要实现类

  1.2.1.List 接口的实现类

  • ArrayList:基于动态数组实现,支持随机访问,非线程安全。在需要频繁读取元素时性能较好。

  • LinkedList:基于双向链表实现,适合频繁的插入和删除操作,同时实现了Deque接口,可以用作队列或双端队列。

  • Vector:和 ArrayList 类似,但是线程安全的。它的方法大多是同步的。现在较少使用,因为即使需要线程安全,也有其他更好的选择(如使用 Collections.synchronizedList 或 CopyOnWriteArrayList)。

  1.2.2.Set 接口的实现类

  • HashSet:基于哈希表实现,不保证元素的顺序,允许使用null元素。

  • LinkedHashSet:具有可预测的迭代顺序,即插入顺序。它通过维护一个运行于所有条目的双向链表来实现。

  • TreeSet:基于红黑树实现,元素可以按照自然顺序或者自定义的比较器进行排序。

  1.2.3.Queue 接口的实现类

  • LinkedList:实现了Queue接口,可以作为队列使用。

  • PriorityQueue:基于优先级堆(通常是最小堆)实现,元素按照自然顺序或者比较器顺序出队。

  1.2.4.Map接口的实现类

  • HashMap:基于哈希表实现,允许null键和null值,非线程安全。

  • LinkedHashMap:保留插入顺序或访问顺序(最近访问的元素可以放在最后,通过构造函数设置)。

  • TreeMap:基于红黑树实现,键按照自然顺序或比较器顺序排序。

  • Hashtable:线程安全的,类似于HashMap,但不允许null键和null值。现在较少使用,因为即使需要线程安全,也有ConcurrentHashMap等更好的选择。

二、代码实现

2.1.Collection接口体系

  2.1.1.List 接口(有序、可重复)

// ArrayList - 基于动态数组
List arrayList = new ArrayList<>();
arrayList.add("A");
arrayList.add("B");
// LinkedList - 基于双向链表
List linkedList = new LinkedList<>();
linkedList.add("A");
linkedList.addFirst("B"); // 在头部添加
// Vector - 线程安全的动态数组(已过时,不推荐使用)
List vector = new Vector<>();
// Stack - 后进先出(LIFO)
Stack stack = new Stack<>();
stack.push("A");
stack.pop();

  2.1.2.Set 接口(无序、不可重复)

// HashSet - 基于哈希表,无序
Set hashSet = new HashSet<>();
hashSet.add("A");
hashSet.add("B");
// LinkedHashSet - 保持插入顺序
Set linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add("A");
linkedHashSet.add("B");
// TreeSet - 基于红黑树,有序
Set treeSet = new TreeSet<>();
treeSet.add("C");
treeSet.add("A"); // 自动排序:A, C

  2.1.3.Queue 接口(队列)

// LinkedList也实现了Queue接口
Queue queue = new LinkedList<>();
queue.offer("A"); // 添加元素
queue.poll();     // 移除并返回头部元素
// PriorityQueue - 优先级队列
Queue priorityQueue = new PriorityQueue<>();
priorityQueue.offer(5);
priorityQueue.offer(1); // 按自然顺序排序
// ArrayDeque - 双端队列
Deque deque = new ArrayDeque<>();
deque.addFirst("A");
deque.addLast("B");

2.2.Map 接口体系

// HashMap - 基于哈希表,键值对
Map hashMap = new HashMap<>();
hashMap.put("Apple", 1);
hashMap.put("Banana", 2);
// LinkedHashMap - 保持插入顺序
Map linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("Apple", 1);
linkedHashMap.put("Banana", 2);
// TreeMap - 基于红黑树,按键排序
Map treeMap = new TreeMap<>();
treeMap.put("Banana", 2);
treeMap.put("Apple", 1); // 按键排序:Apple, Banana
// Hashtable - 线程安全(已过时)
Map hashtable = new Hashtable<>();
// ConcurrentHashMap - 线程安全的HashMap
ConcurrentHashMap concurrentMap = new ConcurrentHashMap<>();

三、集合比较

  3.1.性能比较

集合类型获取插入删除顺序线程安全
ArrayListO(1)O(n)O(n)插入顺序
LinkedListO(n)O(1)O(1)插入顺序
HashSetO(1)O(1)O(1)
TreeSetO(log n)O(log n)O(log n)排序
HashMapO(1)O(1)O(1)
TreeMapO(log n)O(log n)O(log n)按键排序

  3.2.选择指南

  • 需要快速随机访问:ArrayList

  • 频繁插入删除:LinkedList

  • 去重且不关心顺序:HashSet

  • 去重且插入保持顺序:LinkedHashSet

  • 去重且需要排序:TreeSet

  • 键值对存储:HashMap

  • 键值对且插入保持顺序:LinkedHashMap

  • 键值对且按键排序:TreeMap

  • 多线程环境:ConcurrentHashMap、CopyOnWriteArrayList

  • 需要队列功能:LinkedList、ArrayDeque、PriorityQueue

http://www.gsyq.cn/news/135856.html

相关文章:

  • 别再手动清洗星载数据了!Open-AutoGLM一键自动化方案已上线
  • 2025一物一码公司推荐指南:再互动一物一码平台领衔适配全行业 - 品牌智鉴榜
  • ​神经医学专家解读:2025甲钴胺精选白皮书,六大品牌谁领先?圣舒养优化修复效能 - 博客万
  • 云手机的兼容性如何
  • 2025昆明婚纱摄影口碑TOP10推荐出炉:综合实力王者领衔,备婚新人必看 - 提酒换清欢
  • 贵阳GEO优化公司怎么选?AI搜索时代,本地企业正在被重新“筛选” - 优质品牌推荐TOP榜
  • 【Open-AutoGLM脑机接口交互革命】:揭秘下一代人机协同核心技术
  • 2025年百度AI优化排名公司推荐分析:Geo优化引领精准获客 - 品牌推荐排行榜
  • 小车称王、油电共存——2025 年中国车市“重塑”背后的真相!
  • 收藏这篇就够了!2026年AI Agent趋势全景图:从技术到商业,一篇讲透!
  • 餐饮装修不踩坑!2025 陕西 5 大靠谱设计公司推荐,大品装修领跑西安装修商业空间品质赛道 - 深度智识库
  • jdk 的安装过程
  • 智慧社区能源监测可视化管理方案
  • 构筑通信防线:针对失效、丢失、残缺、乱序、伪造五大威胁的防护要点
  • ollama的python库源码查看方法
  • 大模型分布式训练面试精解:DP/TP/PP与ZeRO全指南
  • 灾情突袭如何快速响应?,Open-AutoGLM智能调度系统全流程拆解
  • 救命!我的AI机器人想撞墙!大模型安全框架拯救计划,程序员必看
  • 程序员必学!一文读懂RAG检索增强生成技术,让你的大模型更靠谱(建议收藏)
  • 2025四川防尘网生产厂家权威推荐:匠心品质守护施工安全 - 深度智识库
  • 第1章:大模型基础认知
  • 2025年四川防伪网生产厂家最新推荐——聚焦实力企业,筑牢安全防线 - 深度智识库
  • 2025年济南同城搬家公司联系方式汇总: 本地资深企业官方联系渠道与一站式搬迁方案指引 - 品牌推荐
  • 2025年上海居民搬家公司联系方式汇总: 本地资深企业官方联系渠道与一站式搬迁方案解析 - 品牌推荐
  • 数据库事务ACID特性与隔离级别
  • Open-AutoGLM模型压缩技术揭秘:在边缘设备上实现毫秒级推理的6种方法
  • 2025年入职/转行网络安全,该如何规划?_网络安全职业规划
  • AI内容生成革命来了,你还在手动写文案?
  • 项目申报管理系统哪家强:8款提升申报流程效率与合规性的工具测评
  • 网络空间安全专业全景解读:它究竟学什么?未来做什么?(附完整知识体系与学习路径)