集合类基础概念

article/2025/6/10 19:42:01

目录

集合类概述

集合框架的体系结构

单列集合(Collection)

List接口

Set接口

双列集合(Map)

Map接口

线程安全与性能考虑

集合与数组的区别

大小是否固定

数据类型与存储

操作方法丰富性

内存与性能

类型安全与泛型支持

多态性和接口支持

选择集合适用的原则


集合类概述

集合(Collection)是用来存储、获取和操作一组对象的容器,是程序中非常重要的数据结构。Java 集合框架(Java Collections Framework, JCF)提供了一组接口和实现,方便开发者进行各种数据的存储操作

集合框架的体系结构

集合框架主要分为两大类:一类是单列集合父类接口为Collection,另一类是双列集合父类接口是Map

单列集合(Collection)

List接口

List是有序集合,允许元素重复,可以通过索引访问元素。

主要实现类:

  • Vector:基于数组实现,线程安全(方法同步),但性能较低

  • ArrayList:基于动态数组实现,非线程安全,随机访问快,增删慢

  • LinkedList:基于双向链表实现,非线程安全,增删快,随机访问慢

Set接口

Set不允许重复元素,通常用于去重场景。

主要实现类(图中有些Set实现类被错误地归类在List下):

  • HashSet:基于哈希表实现,无序

  • LinkedHashSet:基于哈希表和链表实现,维护插入顺序

  • TreeSet:基于红黑树实现,元素按自然顺序或Comparator排序

双列集合(Map)

Map接口

Map存储键值对(key-value)映射,key不可重复。

主要实现类:

  • HashTable:早期实现,线程安全(方法同步),不允许null键/值

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

  • LinkedHashMap:维护插入顺序或访问顺序

  • ConcurrentHashMap:线程安全实现,比HashTable性能更好

  • TreeMap:基于红黑树实现,键按自然顺序或Comparator排序

线程安全与性能考虑

线程安全集合:Vector、HashTable、ConcurrentHashMap

非线程安全集合:ArrayList、LinkedList、HashMap等

性能优化

  • 频繁查询用ArrayList

  • 频繁增删用LinkedList

  • 需要排序用TreeSet/TreeMap

  • 需要保持插入顺序用LinkedHashSet/LinkedHashMap

  • 多线程环境用ConcurrentHashMap替代HashTable

集合与数组的区别

大小是否固定

数组(Array)

  • 创建时需要指定固定的大小,长度一旦确定,就不可更改。

  • 如果需要改变容量,只能创建新的数组,拷贝原数组数据,比较麻烦且低效。

  • 适合已知数据量且大小固定的场景。

集合(Collection)

  • 大小是动态可变的,可以随时添加或删除元素,容量自动扩展或收缩。

  • ArrayList 为例,底层使用动态数组实现,容量不足时会自动扩容。

  • 适合数据量不确定或需要频繁增删改的场景。


数据类型与存储

数组

  • 可以存储基本类型(如int[], char[])或对象类型(如String[])。

  • 基本类型数组性能高,因为直接存储数据。

  • 对象数组存储的是对象引用。

集合

  • 只能存储对象类型(引用类型),不能存储基本类型,需用包装类(如Integer代替int)。

  • 支持泛型(Generics),可以指定存储对象的类型,提高代码安全性和可读性。

  • 泛型是编译时类型检查,避免了强制类型转换的麻烦。


操作方法丰富性

数组

  • 操作较为基础,只能通过索引访问元素,增删操作需手动处理(如复制和移动元素)。

  • Java标准库提供了Arrays工具类支持排序、搜索、填充等静态方法,但使用不如集合方便。

集合

提供了丰富的操作接口,如:

  • 添加元素add(E e)

  • 删除元素remove(Object o)removeIf(Predicate<? super E> filter)

  • 查找元素contains(Object o)indexOf(Object o)

  • 遍历:支持迭代器(Iterator)、增强for循环

  • 排序:如Collections.sort(),或者流式操作(Stream API)

  • 批量操作addAll(), removeAll(), retainAll()

使用方便,代码简洁,功能强大。


内存与性能

数组

  • 内存连续分配,访问速度快,尤其是基本类型数组。

  • 对于大量数据和性能敏感场景,数组效率更高。

集合

  • 实现一般基于数组或链表,可能有额外的内存开销。

  • 动态扩容和复杂操作可能影响性能,但带来了灵活性。

  • 不同集合实现有不同性能特点(如ArrayList随机访问快,LinkedList插入删除快)。


类型安全与泛型支持

数组

  • 支持存储具体类型,编译时进行类型检查。

  • 但数组不支持泛型,不能创建泛型数组(new T[]非法)。

  • 数组存在类型协变(covariant),可能导致运行时异常(ArrayStoreException)。

集合

  • 支持泛型,提供编译时类型安全。

  • 避免了运行时的类型转换异常,代码更安全。


多态性和接口支持

数组

  • 是语言内置的基本结构,不支持接口或多态。

  • 不能直接用于面向接口编程。

集合

  • 集合是接口和实现类的体系,支持多态。

  • 可以灵活切换不同实现,比如从ArrayList切换为LinkedList,不影响业务代码。

选择集合适用的原则

  • 需要有序ListLinkedHashSet

  • 需要无重复元素Set

  • 需要键值对存储Map

  • 需要频繁随机访问ArrayList

  • 需要频繁插入删除LinkedList

  • 需要线程安全VectorHashtable、或并发集合类如 ConcurrentHashMap


http://www.hkcw.cn/article/yjdwvVYcnF.shtml

相关文章

1500多个免费的HTML模板

1500多个免费的HTML模板 用于网站&#xff0c;着陆页&#xff0c;博客&#xff0c;投资组合&#xff0c;电子商务和管理仪表板 Free HTML Website Templates on HTMLrev https://htmlrev.com/

博客操作规范

一、博客内容规范 专有名词&#xff1a;深蓝粗体&#xff0c;一级专有名词。 专有名词&#xff1a;靛蓝粗体&#xff0c;二级专有名词。 一般名词&#xff1a;浅蓝粗体&#xff0c;一般名词。 标记名词&#xff0c;蓝色粗体&#xff0c;标记性的名词。 重点句子&#xff1…

秋招Day12 - 计算机网络 - IP

IP协议的定义和作用&#xff1f; IP协议用于在计算机网络中传递数据包&#xff0c;定义了数据包的格式和处理规则&#xff0c;确保数据能够从一个设备传递到另一个设备&#xff0c;中间可能经过多个不同的设备&#xff08;路由器&#xff09;。 IP协议有哪些作用&#xff1f;…

电阻电容的选型

一、电阻选型 1.1安装方式 贴片电阻体积小&#xff0c;适用于SMT生产&#xff1b;功率小&#xff1b;易拆解插件电阻体积大&#xff1b;功率大&#xff1b;不易脱落 1.2阻值 电阻的阻值是离散的&#xff0c;其标称阻值根据精度分为E6、E12、E24、E48、E96、E192六大系列&am…

【网络安全】SRC漏洞挖掘思路/手法分享

文章目录 Tip1Tip2Tip3Tip4Tip5Tip6Tip7Tip8Tip9Tip10Tip11Tip12Tip13Tip14Tip15Tip16Tip17Tip18Tip19Tip20Tip21Tip22Tip23Tip24Tip25Tip26Tip27Tip28Tip29Tip30Tip1 “复制该主机所有 URL”:包含该主机上的所有接口等资源。 “复制此主机里的链接”:包括该主机加载的第三…

论文中pdf图片文件太大怎么办

文章目录 1.使用pdf文件的打印功能将文件导出2.操作3.前后文件大小对比 1.使用pdf文件的打印功能将文件导出 该方法在保证清晰度的同时&#xff0c;内存空间也能实现减少&#xff08;如果使用线上的压缩pdf工具&#xff0c;清晰度会直线下降&#xff09; 2.操作 点击文件—&…

力扣刷题 -- 232. 用栈实现队列

1. 题目 2. 思路分析 1&#xff09;创建两个栈空间&#xff0c;PushST&#xff0c;PopST&#xff1b; 2&#xff09;插入数据往PushST插&#xff0c;判断PopST是否为空&#xff0c;如果为空直接往PopST出数据&#xff1b;如PopST不为空&#xff0c;就先把PopST的数据先出栈&a…

结构型设计模式之Decorator(装饰器)

结构型设计模式之Decorator&#xff08;装饰器&#xff09; 前言&#xff1a; 本案例通过李四举例&#xff0c;不改变源代码的情况下 对“才艺”进行增强。 摘要&#xff1a; 摘要&#xff1a; 装饰器模式是一种结构型设计模式&#xff0c;允许动态地为对象添加功能而不改变其…

完美解决在pycharm中创建Django项目安装mysqlclient报错的问题(windows下)

正常情况下&#xff0c;在Windows安装mysqlclient会报错&#xff1a; 我这里用的是anaconda虚拟环境&#xff0c;安装前必须激活anacoda虚拟环境&#xff0c; 怎么激活虚拟环境&#xff1f;可以参考超详细的pycharmanaconda搭建python虚拟环境_pycharm anaconda环境搭建-CSDN博…

mac环境下的python、pycharm和pip安装使用

Python安装 Mac环境下的python安装 下载地址&#xff1a;https://www.jetbrains.com.cn/pycharm/ 一直点击下一步即可完成 在应用程序中会多了两个图标 IDLE 和 Python launcher IDLE支持在窗口中直接敲python命令并立即执行&#xff0c;双击即可打开 Python launcher双击打…

Spark 单机模式部署与启动

&#x1f680; Spark 单机模式部署与启动教程&#xff08;适配 Hadoop 3.1.1&#xff09; 本文记录了在 Linux 环境中部署 Spark 的完整过程&#xff0c;使用 Standalone 单机模式&#xff0c;适配 Hadoop 3.1.1&#xff0c;最终可通过 Web 页面访问 Spark Master 状态界面。 …

【数据库】安全性

数据库安全性控制的常用方法&#xff1a;用户标识和鉴定、存取控制、视图、审计、数据加密。 1.用户标识与鉴别 用户标识与鉴别(Identification & Authentication)是系统提供的最外层安全保护措施。 2.存取控制 2.1自主存取控制(简称DAC) (1)同一用户对于不同的数据对…

数据采集器支撑循环水养殖系统智能化运维案例

一、项目背景 渔业养殖是关系到我国食物安全和海洋经济发展的重要产业&#xff0c;随着科技的不断进步&#xff0c;传统的养殖模式面临着诸多挑战&#xff0c;如养殖环境复杂、水质变化难以实时监测、设备运行状态不稳定等&#xff0c;这些问题不仅增加了养殖成本&#xff0c;还…

【卡点变速】节拍同步 讨论

一、 "首尾对齐"的前提是变速在合理范围内 变速导致动作资源时长不足的情况咋办? 计算验证: 变速前: 动作原始:1小节 @ BPM 100 = 2.4秒变速后: 变速比例 = 1.18倍速变速后时长 = 2.4秒 1.18 ≈ 2.03秒歌曲要求:2.03秒结果:✓ 完美匹配! 但是会有问题的情…

TDengine 高级功能——流计算

简介 在时序数据的处理中&#xff0c;经常要对原始数据进行清洗、预处理&#xff0c;再使用时序数据库进行长久的储存&#xff0c;而且经常还需要使用原始的时序数据通过计算生成新的时序数据。在传统的时序数据解决方案中&#xff0c;常常需要部署 Kafka、Flink 等流处理系统…

数据资产是什么?数据资产平台如何发挥作用?

目录 一、数据资产是什么 &#xff08;一&#xff09;数据资产的定义 &#xff08;二&#xff09;数据资产的特征 二、数据资产的重要性 &#xff08;一&#xff09;支持企业决策 &#xff08;二&#xff09;提升企业竞争力 &#xff08;三&#xff09;促进业务创新 &a…

MCP 科普 + 实践:基于 HAP 的大模型外部交互协议应用与开发案例

基础知识 Function Call 背景&#xff1a;以前的AI大模型&#xff0c;就像一个知识丰富但被困在屋子里的人&#xff0c;只能依靠自己已有的知识回答问题&#xff0c;没有办法获取实时的数据或者与外部的系统进行交互 Function Call 是 OPEN AI 在 2023 年推出的一个非常重要的…

颈部的 “异常坚持”

生活中&#xff0c;有些人的颈部会突然变得 “异常坚持”—— 头部不受控制地偏向一侧&#xff0c;或是不自主地旋转、后仰&#xff0c;仿佛被无形的力量牵引着。这种情况不仅影响外观&#xff0c;还会带来强烈的不适感&#xff0c;颈部肌肉紧绷、酸痛&#xff0c;像被一根绳索…

Windows应用-音视频捕获

下载“Windows应用-音视频捕获”项目 本应用可以同时捕获4个视频源和4个音频源&#xff0c;可以监视视频源图像&#xff0c;监听音频源&#xff1b;可以将视频源图像写入MP4文件&#xff0c;将音频源写入MP3或WAV文件&#xff1b;还可以录制系统播放的声音。本应用使用MFC对话框…

Linux账号和权限管理

1 Linux用户账号和组账号 Linux系统是一个多用户多任务的分时操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须首先向系统管理员申请一个账号&#xff0c;然后以这个账号的身份进入系统。用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪&…