Java 中有哪些集合类?请简单介绍

以下是Java集合类的分类及简要介绍,按照接口层级组织:


一、Collection 接口

1. List(有序、可重复)
  • ArrayList

    • 基于动态数组,支持快速随机访问(O(1))
    • 线程不安全,默认初始容量10,扩容系数1.5
    • 适用场景:频繁查询、较少增删
  • LinkedList

    • 基于双向链表,插入/删除高效(O(1)),随机访问慢(O(n))
    • 实现了Deque接口,可用作队列或栈
    • 适用场景:频繁增删、实现队列操作
  • Vector

    • 线程安全的动态数组(方法使用synchronized修饰)
    • 性能较差,已被Collections.synchronizedListCopyOnWriteArrayList取代
  • CopyOnWriteArrayList(JUC包)

    • 写时复制技术实现线程安全,读操作无锁
    • 适用场景:读多写极少(如监听器列表)

2. Set(无序、元素唯一)
  • HashSet

    • 基于HashMap实现,元素通过哈希值存储
    • 允许null值,不保证顺序
    • 适用场景:快速去重
  • LinkedHashSet

    • 继承HashSet,通过双向链表维护插入顺序
    • 迭代顺序可预测
    • 适用场景:需维护插入顺序的去重需求
  • TreeSet

    • 基于TreeMap实现,元素按自然顺序或Comparator排序
    • 操作时间复杂度O(log n)
    • 适用场景:需要有序集合
  • CopyOnWriteArraySet(JUC包)

    • 基于CopyOnWriteArrayList实现,线程安全
    • 适用场景:读多写少的并发去重需求

3. Queue(队列)
  • LinkedList

    • 实现了Deque接口,支持双端队列操作
    • 非线程安全
  • PriorityQueue

    • 基于堆结构实现,元素按优先级排序
    • 不允许null值,默认自然排序或自定义Comparator
  • ArrayDeque

    • 基于循环数组实现的高效双端队列
    • 性能优于LinkedList,适用于栈和队列操作
  • BlockingQueue(JUC包)

    • 线程安全阻塞队列,实现类包括:
      • ArrayBlockingQueue:有界数组实现
      • LinkedBlockingQueue:可选有界链表实现
      • PriorityBlockingQueue:支持优先级的无界队列
    • 适用场景:生产者-消费者模型

二、Map 接口(键值对)

1. 通用实现
  • HashMap

    • 基于哈希表(数组+链表/红黑树,JDK8+)
    • 允许null键/值,非线程安全
    • 适用场景:快速存取键值对
  • LinkedHashMap

    • 维护插入顺序或访问顺序(LRU实现基础)
    • 内部通过双向链表记录顺序
  • TreeMap

    • 基于红黑树实现,键按自然顺序或Comparator排序
    • 适用场景:需要有序键值对的场景
  • Hashtable

    • 线程安全的哈希表(方法使用synchronized修饰)
    • 过时类,建议用ConcurrentHashMap替代

2. 并发实现(JUC包)
  • ConcurrentHashMap

    • 分段锁(JDK7)或CAS+synchronized(JDK8+)实现高并发
    • 支持高并发读写,性能优于Hashtable
  • ConcurrentSkipListMap

    • 基于跳表实现的有序并发Map
    • 适用场景:高并发有序键值对需求

三、工具类

  • Collections

    • 提供同步包装方法:synchronizedList(), synchronizedSet()
    • 生成不可变集合:unmodifiableList(), unmodifiableMap()
  • Arrays

    • 数组工具类,提供asList()、排序/搜索方法

四、选择策略

  1. 是否需要线程安全?

    • 是:使用ConcurrentHashMapCopyOnWriteArrayList
    • 否:默认选择HashMapArrayList
  2. 是否需要排序?

    • 是:TreeMapTreeSet
    • 否:HashMapHashSet
  3. 插入/删除 vs 随机访问

    • 频繁增删:LinkedList
    • 频繁查询:ArrayList

五、示例场景

  • 缓存实现LinkedHashMap(LRU淘汰策略)
  • 高并发计数ConcurrentHashMapcompute()方法
  • 事件监听器CopyOnWriteArrayList(避免遍历时修改异常)

通过理解不同集合类的底层实现与特性,能够根据具体业务场景选择最合适的数据结构,从而优化性能与资源使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14502.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux之文件IO前世今生

在 Linux之文件系统前世今生(一) VFS中,我们提到了文件的读写,并给出了简要的读写示意图,本文将分析文件I/O的细节。 一、Buffered I/O(缓存I/O)& Directed I/O(直接I/O&#…

【计组】实验五 J型指令设计实验

目录 一、实验目的 二、实验环境 三、实验原理 四、实验任务 代码 一、实验目的 1. 理解MIPS处理器指令格式及功能。 2. 掌握lw, sw, beq, bne, lui, j, jal指令格式与功能。 3. 掌握ModelSim和ISE\Vivado工具软件。 4. 掌握基本的测试代码编写和FPGA开发板使用方法。 …

扩展知识--缓存和分时复用cpu

在多核CPU中,缓存和分时复用CPU是两个重要的概念,它们分别涉及硬件架构和资源管理策略。以下将从缓存的层次结构、工作原理以及分时复用CPU的概念进行详细解释。 一、多核CPU中的缓存 缓存的定义与作用 缓存(Cache)是位于CPU与主…

人工智能:从概念到未来

人工智能:从概念到未来 一、引言 在当今数字化时代,人工智能(Artificial Intelligence,AI)已从科幻小说和电影中的幻想逐渐走进现实,成为推动社会进步和经济发展的关键力量。它正在深刻地改变着我们的生活…

nvm:node 版本管理器

一、先安装git Git 安装完成后执行 git --version查看版本号是否安装成功 二、安装nvm (参考链接:mac 安装nvm详细教程 - 简书) 官网(https://github.com/nvm-sh/nvm/blob/master/README.md)查看最新版本安装命令 …

【1】深入解析 SD-WAN:从思科 SD-WAN 视角看现代网络发展

1. 什么是 SD-WAN? SD-WAN(软件定义广域网,Software-Defined Wide Area Network)是一种基于 SDN(软件定义网络)的广域网技术。它利用软件控制来管理广域网连接、流量和安全策略,从而优化数据传输,提高网络可用性。 传统的广域网(WAN)通常依赖专线(如 MPLS)连接分…

C语言基础学习之环境准备

写在前面 本文看下如何在win环境中使用vs code开发C程序。 1:安装gcc 从这里下载,解压,配置环境变量,执行gcc -v验证: C:\Windows\system32>gcc -v Using built-in specs. COLLECT_GCCgcc COLLECT_LTO_WRAPPERD:/programs/…

LabVIEW之TDMS文件

在很多场合,早期的LabVIEW版本不得不借助常规的数据库来做一些数据管理工作,但常规数据库对于中高速数据采集显然是不合适的,因为高速数据采集的数据量非常大,用一般的数据库无法满足存储数据的要求。 直到TDM(Technical Data Ma…

设置IDEA的内存大小,让IDEA更流畅: 建议设置在 2048 MB 及以上

文章目录 引言I 更改内存设置基于窗口界面进行内存设置修改内存配置文件II IDEA中的一些常见问题及其解决方案引言 方式一:基于窗口界面进行内存设置方式二:修改内存配置文件I 更改内存设置 基于窗口界面进行内存设置 打开IDEA,上方菜单栏 Help > Change Memory Settin…

攻防世界ctf

1.题目名称-文件包含 if(isset($_GET[filename])){$filename $_GET[filename];include($filename);} 通过代码审计,我们发现这存在文件包含漏洞,由于没有很好的进行过滤,所以我们可以通过 URL 参数传递任意文件路径给参数$filename&#…

多线程操作

一.多线程 1.线程的创建 1.继承Thread类,重写run()方法创建线程 2.实现Runnable接口,重写run()方法 3.匿名内部类创建线程 4.匿名内部类实现Runnable接口创建线程 5.[常用]lambda表达式创建线程 2.启动线程 Thread类使用start方法,启动一个线程,对于同一个Thread对象只能…

根文件系统 Debian10【1】移植

1.开发背景 一般根文件系统使用 Busybox 或者是 Buildroot 构建,这样构建出来的文件系统比较小,但是不具备上网功能,扩展性比较差。随着 ARM 的日益强大,ARM 可以搭载更庞大复杂的系统,可以是 Ubuntu 或者 Debian 等发…

OpenSIPS-Dispatcher模块详解:优化SIP流量分发的利器

在 OpenSIPS 中,dispatcher 模块用于实现负载均衡和故障转移。通过 dispatcher 模块,你可以将 SIP 请求分发到一组后端服务器(如媒体服务器、代理服务器等),并根据配置的算法和策略动态调整分发逻辑。 模块功能使用样…

09vue3实战-----引入element-plus组件库中的图标

09vue3实战-----引入element-plus组件库中的图标 1.安装2.引入3.优化 element-plus中的icon图标组件的使用和其他平台组件(如el-button按钮)是不一样的。 1.安装 npm install element-plus/icons-vue2.引入 在这我们只讲述最方便的一种引入方法------完整引入。这需要从elem…

Docker 部署 GitLab

一、下载镜像 docker pull gitlab/gitlab-ce 二、运行容器 docker run -d --name gitlab-20080 \n -p 20443:443 -p 20080:80 -p 20022:22 \n -v /wwwroot/opt/docker/gitlab-20080/etc:/etc/gitlab \n -v /wwwroot/opt/docker/gitlab-20080/log:/var/log/gitlab \n -v /www…

优惠券平台(十七):实现用户查询/取消优惠券预约提醒功能

业务背景 当用户预约了一个或多个优惠券抢购提醒后,如果不再需要提醒,可以取消预约通知。不过,虽然用户可以取消提醒,但已经发送到 MQ 的消息不会被撤回,消费者在时间点到达时依然会收到消息。此时,我们不…

【个人开发】macbook m1 Lora微调qwen大模型

本项目参考网上各类教程整理而成,为个人学习记录。 项目github源码地址:Lora微调大模型 项目中微调模型为:qwen/Qwen1.5-4B-Chat。 去年新发布的Qwen/Qwen2.5-3B-Instruct同样也适用。 微调步骤 step0: 环境准备 conda create --name fin…

深入理解进程优先级

目录 引言 一、进程优先级基础 1.1 什么是进程优先级? 1.2 优先级与系统性能 二、查看进程信息 2.1 使用ps -l命令 2.2 PRI与NI的数学关系 三、深入理解Nice值 3.1 Nice值的特点 3.2 调整优先级实践 四、进程特性全景图 五、优化实践建议 结语 引言 在操…

大数据学习之SparkSql

95.SPARKSQL_简介 网址: https://spark.apache.org/sql/ Spark SQL 是 Spark 的一个模块,用于处理 结构化的数据 。 SparkSQL 特点 1 易整合 无缝的整合了 SQL 查询和 Spark 编程,随时用 SQL 或 DataFrame API 处理结构化数据。并且支…

k8s的操作指令和yaml文件

一、项目的生命周期 创建----》发布----》更新----》回滚----》删除 1.创建 kubectl create deployment nginx1 --imagenginx:1.22 --replicas3 #基于deployment控制器创建pod,控制器的名称是nginx1,pod使用的镜像是nginx:1.22,pod的数量有3个 2.发布 ku…