Java—集合简述

集合类继承结构图

          Collection
              |
   ---------------------
  |          |           |
Set        List         Queue
  |          |           |
SortedSet  ArrayList   Deque
  |        LinkedList    |
NavigableSet  Vector    ArrayDeque
  |         Stack        |
TreeSet                LinkedList
                         |
                     PriorityQueue

       Map
        |
  -----------------
  |               |
SortedMap     ConcurrentMap
  |               |
NavigableMap  ConcurrentHashMap
  |
TreeMap
  |
HashMap
  |
LinkedHashMap

详细说明

  1. Collection 接口 是所有集合的根接口,它提供了对集合对象进行基本操作的方法。Set, List, 和 QueueCollection 接口的三个主要子接口。

  2. Set 接口:一个不包含重复元素的集合。

  • SortedSet:保证集合中的元素处于排序状态。

  • NavigableSet:提供了导航方法。
  • TreeSet:基于红黑树实现的 NavigableSet。
  1. List 接口:一个有序集合,可以包含重复元素。

    • ArrayList:基于动态数组实现的 List。
    • LinkedList:基于双向链表实现的 List,也实现了 Deque 接口。
    • Vector:同步的动态数组。
      • Stack:后进先出 (LIFO) 的栈。
  2. Queue 接口:通常用于按顺序处理元素。

    • Deque:双端队列,可以从两端添加和移除元素。
      • ArrayDeque:基于动态数组实现的 Deque。
      • LinkedList:也实现了 Deque 接口。
    • PriorityQueue:基于优先级堆的队列。
  3. Map 接口:用于存储键值对映射,不属于 Collection 接口的子接口。

    • SortedMap:保证键处于排序状态。
      • NavigableMap:提供了导航方法。
        • TreeMap:基于红黑树实现的 NavigableMap。
    • ConcurrentMap:提供线程安全的并发映射。
      • ConcurrentHashMap:高效的并发哈希映射。
    • HashMap:基于哈希表实现的 Map。
      • LinkedHashMap:维护元素插入顺序或访问顺序的 HashMap。

总结

在Java集合框架中,线程安全和有序性是两个重要的概念。线程安全表示一个类的实例可以安全地被多个线程访问而不会产生数据不一致的情况,而有序性则表示集合中的元素是否可以按照某种顺序进行访问或遍历。下表总结了Java集合框架中常见类的线程安全性和有序性:

需要注意的是,虽然HashTable和ConcurrentHashMap都是线程安全的,但是ConcurrentHashMap通过分段锁实现更好的并发性能,推荐在多线程环境中使用。另外,ArrayList和LinkedList都是有序的,但是它们的内部实现和性能特点有所不同,需要根据具体的需求进行选择。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构笔记-2、线性表

2.1、线性表的定义和基本操作 如有侵权请联系删除。 2.1.1、线性表的定义: ​ 线性表是具有相同数据类型的 n (n>0) 个数据元素的有限序列,其中 n 为表长,当 n 0 时线性表是一个空表。若用 L 命名线性表,则其一般表示为&am…

【软件工程导论】——期末复习(冲刺篇)

📖 前言:快考试了,做篇期末总结,都是重点与必考点。 题型:材料分析题、简答题、看图分析题 课本: 目录 🕒 1. 软件生存周期与软件过程🕘 1.1 软件生存周期🕘 1.2 传统…

Java老人护理上门服务类型系统小程序APP源码

🌸 老人上门护理服务系统:温暖与专业并存 🌸 一、🏠 走进老人上门护理服务系统 随着社会的快速发展,我们越来越关注老年人的生活质量。老人上门护理服务系统应运而生,它结合了现代科技与人性化服务&#…

webpack代码分割

webpack代码分割方式 entry配置:通过多个 entry 文件来实现动态加载(按需加载):通过主动使用import来动态加载抽取公共代码:使用splitChunks配置来抽取公共代码 基础概念 概念含义Entry入口,Webpack 执行构建的第一步将从 Entr…

Adobe Illustrator (AI)小技巧总结

AI2024(64bit) Adobe Illustrator 软件安装包下载地址: 百度网盘下载https://pan.baidu.com/s/1C10-2JVN1rxFF5VFRuV2Yw?pwdSIMS 1.效果-扭曲与变换-变换,两个图形组合(CtrlG)中心点在中间 例:角度7.5副本24半圆48格…

pdf格式转成jpg图片,pdf格式如何转jpg

pdf转图片的方法,对于许多人来说可能是一个稍显陌生的操作。然而,在日常生活和工作中,我们有时确实需要将pdf文件转换为图片格式,以便于在特定的场合或平台上进行分享、展示或编辑。以下,我们将详细介绍一个pdf转成图片…

网工内推 | 外企、上市公司运维工程师,有软考中高项证书优先

01 优尼派特(苏州)物流有限公司 🔷招聘岗位:软件运维测试工程师 🔷任职要求: 1、负责公司自主研发的软件售后服务工作, 包括软件的安装, 调试, 升级,培训, 参数配置, 需求与Bug的处理; 2、负责数据库升级及…

Joplin Typora 粘贴图片 | 当使用Typora作为Joplin编辑器时,如何粘贴图片并上传到Joplin服务器,替换链接

一、背景 当我们使用Joplin时,上传图片时会自动上传到Joplin服务器并替换链接 但是Joplin的编辑器不好用,我更习惯用Typora来编辑, 然而Typora中上传的图片只能在本地,无法上传到Joplin服务器,在其他客户端也看不到图片…

快速理解 Node.js 版本差异:3 分钟指南

Node.js 是一个广泛使用的 JavaScript 运行时环境,允许开发者在服务器端运行 JavaScript 代码。随着技术的发展,Node.js 不断推出新版本,引入新特性和改进。了解不同版本之间的差异对于开发者来说至关重要。以下是一个快速指南,帮…

什么是相对路径?什么是绝对路径?打包时路径怎么搞?

简单点说: 绝对路径:绝对路径是一个完整的路径,从根目录开始一直到目标文件或目录的路径。通常我们直接使用"/ "代表从根目录开始的目录路径。它提供了文件或目录在文件系统中的确切位置,与当前工作目录无关。绝对路径…

华媒舍:15种媒体推广普遍不正确及解决方法

做为新闻媒体推广的重要一环,主流媒体推广在这个时代仍然发挥着重要的作用。由于种种原因,大家在主流媒体推广中常常做出各种各样不正确。为了能帮助广大推广工作人员们更好地进行主流媒体推广,本文可能详细介绍15种常见的错误,并…

修改版的VectorDBBench更好用

原版本VectorDBBench的几个问题 在这里就不介绍VectorDBBench是干什么的了,上官网即可。 1.并发数设置的太少 2.测试时长30秒太长 3.连接milvus无用户和密码框,这个是最大的问题 4.修改了一下其它参数 由于很多网友发私信问一些milvus的相关技术问…

史上最全,呕心沥血总结oracle推进SCN方法(八)

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG数据库运维(如安装迁移,性能优化、故障应急处理等) 公众号:老苏畅谈运维 欢迎关注本人公众号,更多精彩与您分享。前面介…

查分易老师怎么用?

老师们想知道怎么样创建一个查分易成绩查询系统吗?" 这是许多老师在学期结束时关心的问题。别担心,查分易小程序让查询发布工作变得省事又高效。 首先成绩Excel表格格式要设置正确。第一行必须是表头,包含学生的"姓名"、"…

qt(使用c++建立图形化界面)

建立QQ页面 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {//1:设置窗口标题this->setWindowTitle("QQ");//2:重新设计窗口大小this->resize(540,420);//3:设置窗口小图标 添加QIcon头文件 注意路径中替换/this->setWindowIcon(QIcon(&q…

【类型商店】字符字符串(下)

啊,哈喽,小伙伴们大家好。我是#Y清墨,今天呐,我要介绍的是字符与字符串。 导语 前两期,我们已经懂得了概念,今天来看些函数。 正题 一.增加或连接 (1) 后面增加() string s1,s2; //定义 s…

【动态规划】| 路径问题之最小路径和 力扣64

🎗️ 主页:小夜时雨 🎗️专栏:动态规划 🎗️如何活着,是我找寻的方向 目录 1. 题目解析2. 代码 1. 题目解析 题目链接: https://leetcode.cn/problems/minimum-path-sum/description/ 这道题目和之前一道…

Pygame常用模块

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 Pygame做游戏开发的优势在于不需要过多考虑与底层开发相关的内容,而可以把工作重心放在游戏逻辑上。例如,Pygame中集成了很多…

认识非线性调频(NLFM)信号和脉冲压缩

目录 1.原理概述2.相位逗留法设计NLFM2.1 原理分析 2.2 Matlab实现 微信公众号获取更多FPGA相关源码: 1.原理概述 非线性调频信号(NLFM)脉冲压缩原理:即采用非线性调频信号的代替线性调频信号,目的是在脉压后获得更…

大厂Java面试题:MyBatis是中如何将结果集映射到Java持久化对象?都有哪些方式?有什么区别?

大家好,我是王有志。今天给大家带来的是一道来自京东的 MyBatis 面试题:MyBatis是中如何将结果集映射到Java持久化对象?都有哪些方式?有什么区别? MyBatis 提供了两种实现结果集到 Java 持久化对象的映射方式&#xf…