Java—集合简述

news2025/1/11 18:32:49

集合类继承结构图

          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都是有序的,但是它们的内部实现和性能特点有所不同,需要根据具体的需求进行选择。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

外卖跑腿APP开发指南:探索同城O2O系统源码技术要点

同城O2O系统作为这类服务的技术支撑平台,承载了外卖跑腿APP的开发与运行。本篇文章,小编将深入探讨同城O2O系统源码的技术要点,为外卖跑腿APP的开发提供指导与参考。 一、同城O2O系统概述 同城O2O系统是一种基于地理位置的线上到线下服务平台…

centos7.9部署k8s的几种方式

文章目录 一、常见的k8s部署方式1、使用kubeadm工具部署2、基于二进制文件的部署方式3、云服务提供商的托管 Kubernetes 服务4、使用容器镜像部署或自动化部署工具 二、使用kubeadm工具部署1、硬件准备(虚拟主机)2、环境准备2.1、所有机器关闭防火墙2.2、…

【docker 不希望每次sudo docker cmd】

一、背景 ubuntu系统下安装好了docker 不希望每次sudo docker cmd,这样每次多输入很多字,比较麻烦 二、原理 在 Ubuntu 等 Linux 发行版上,使用 Docker 命令时常常需要使用 sudo 命令,这是因为 Docker 的服务是以 root 权限运行…

vite工程化搭建vue项目之自动按需导入

背景 当我们在使用vue3组合式开发的时候&#xff0c;大多数情况下我们的代码可能是这样的 <script setup lang"ts"> import { ref, reactive, toRefs, onMounted, computed } from vue; defineProps({}); </script><template><div></di…

【介绍下ERP,什么是ERP?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

C++回溯算法

迷宫的所有路径 #include<bits/stdc.h> using namespace std; void func(int,int,int); bool a[110][110]; int b[110]; int c[110]; int top1; int n; int main() {cin>>n;for(int i1;i<n;i)for(int j1;j<n;j)a[i][j]true;b[0]1;c[0]1;a[1][1]false;func(1,…

两条单链表相交求交点-链表题

面试题 02.07. 链表相交 - 力扣&#xff08;LeetCode&#xff09; A和B两个链表&#xff0c;A走完再走BD&#xff0c;B走完再走AD&#xff1b; 这样走的路程一样&#xff0c;动手画一下就发现D点他们会碰到 class Solution { public:ListNode *getIntersectionNode(ListNode …

「PS图像软件下载」Adobe Photoshop专业图像处理软件资源获取!

Photoshop&#xff0c;无论是对于初学者还是资深设计师&#xff0c;Photoshop都以其易上手且深度足够的特性&#xff0c;赢得了广泛的赞誉。 在修图方面&#xff0c;Photoshop的表现尤为出色。无论是调整色彩平衡、裁剪图片&#xff0c;还是去除瑕疵、增强细节&#xff0c;Phot…

02 Pytorch_NLP

1. N-gram n决定关联信息 2. TF____IDF TF&#xff1a;词频 IDF&#xff1a;逆向序列 假如&#xff1a;TF * IDF 就是当前的文件&#xff0c;那么乘积反而更大&#xff01; 因为它只出现在 特定的文章中&#xff01; TF-IDF 简介 TF-IDF&#xff08;Term Frequency-Inverse…

bugku---misc---赛博朋克

1、下载附件解压之后是一个txt文本&#xff0c;查看文本的时候看到头部有NG的字样 2、把txt改为png后缀得到一张图片 3、binwalk没发现奇怪的地方&#xff0c;分离出来还是图片 4、stegslove分析&#xff0c;切换图片没有发现奇怪地方 5、将通道rgb置为0。出现了flag但是flag不…

微信小程序-uniapp-切换tab时数据列表如何切换?

如图&#xff1a; 这里有两个tab&#xff0c;要保证每次切换后列表保持不变&#xff0c;就必须在运行时要有两个持久化的数据源&#xff0c;每个tab是一个列表&#xff0c;让我们来设计一下这样的数据结构。 首先我们的数据结构是这样的&#xff1a; 体现在vue的data是这样的&a…

opencv 通过滑动条调整阈值处理、边缘检测、轮廓检测、模糊、色调调整和对比度增强参数 并实时预览效果

使用PySimpleGUI库创建了一个图形用户界面(GUI),用于实时处理来自OpenCV摄像头的图像。它允许用户应用不同的图像处理效果,如阈值处理、边缘检测、轮廓检测、模糊、色调调整和对比度增强。用户可以通过滑动条调整相关参数。 完整代码在文章最后,可以运行已经测试; 代码的…

【C++取经之路】继承

目录 继承的概念及定义 单继承的格式 继承方式和访问限定符 继承后子类访问基类成员的权限 基类和派生类对象赋值转换 切片 继承中的作用域 引申&#xff1a;重载和隐藏的区别 派生类的默认成员函数 继承与友元 继承与静态成员 如何实现一个不能被继承的类 复杂的…

Ubuntu 24.04 屏蔽snap包

Ubuntu 24.04 屏蔽snap包 屏蔽 这里所说的屏蔽指的是&#xff1a;禁止sudo apt install firefox时安装snap版本的包。 如需卸载snap&#xff0c;请使用关键词搜索。 命令行 cat <<EOF | sudo tee /etc/apt/preferences.d/snap-apps-disable Package: chromium* firef…

SpringBoot启动流程、起步依赖、配置文件、运行方式与核心注解

讲一讲SpringBoot启动流程 springboot项目在启动的时候, 首先会执行启动引导类里面的SpringApplication.run(AdminApplication.class, args)方法 这个run方法主要做的事情可以分为三个部分 : 第一部分进行SpringApplication的初始化模块&#xff0c;配置一些基本的环境变量、…

鲁教版八年级数学下册-笔记

文章目录 第六章 特殊平行四边形1 菱形的性质与判定2 矩形的性质与判定3 正方形的性质与判定 第七章 二次根式1 二次根式2 二次根式的性质3 二次根式的加减二次根式的乘除 第八章 一元二次方程1 一元二次方程2 用配方法解一元二次方程3 用公式法解一元二次方程4 用因式分解法解…

RERCS系统开发实战案例-Part04 创建FPM Application的搜索组件UIBB及其Feeder Class创建分配

继FPM Application创建完成后&#xff0c;新增对应的UIBB。 1、通过事务码 FPM_WB 进入FPM Application的配置界面 1&#xff09;条件搜索组件UIBB&#xff08;用于页面添加字段作为搜索条件&#xff09;&#xff1b; 2&#xff09;编辑配置标识和标题&#xff1b; 3&#xff…

TF-IDF算法教程

前言 TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xff09;是一种常用的文本分析技术&#xff0c;广泛应用于信息检索和文本挖掘领域。它是一种统计方法&#xff0c;用于评估一个词语在一个文档中的重要程度。TF-IDF的核心思想是&#xff1a;如果一个词语…

CXL协议中 Register Locator DVSEC详解

✨ 前言&#xff1a; Register Locator DVSEC&#xff08;Designated Vendor-Specific Extended Capability&#xff09;是一种PCI Express&#xff08;PCIe&#xff09;配置空间的能力&#xff0c;专为CXL&#xff08;Compute Express Link&#xff09;技术中的设备设计。这包…

linux中DNS域名解析服务

DNS系统在网络中的作用就是维护一个地址数据库&#xff0c;其中记录了各种主机域名与IP地址的对应关系&#xff0c;以便为客户程序提供正向或反向的地址查询服务&#xff0c;即正向解析与反向解析。 正向解析&#xff1a;根据域名查IP地址&#xff0c;即将指定的域名解析为相对…