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

一文回顾讲解Java中的集合框架

这篇文章以提问的方式总结回顾下Java中常见的集合框架

  • Java中的集合框架可以分为两条大的支线:Collection和Map

    • Collection,主要由List、Set、Queue组成;
      • List是有序,可重复的集合,典型代表有封装了动态数组的ArrayList和封装了链表的LinkedList
      • Set是无序,不可重复的,典型代表有HashSet和TreeSet
      • Queue代表队列,典型代表就是双端队列ArrayQueue以及优先级队列PriorityQueue
    • Map代表键值对的集合,典型代表就是HashMap;
      在这里插入图片描述
      ①、Collection 接口:最基本的集合框架表示方式,提供了添加、删除、清空等基本操作,它主要有三个子接口:
  • List:一个有序的集合,可以包含重复的元素。实现类包括 ArrayList、LinkedList 等。

  • Set:一个不包含重复元素的集合。实现类包括 HashSet、LinkedHashSet、TreeSet 等。

  • Queue:一个用于保持元素队列的集合。实现类包括 PriorityQueue、ArrayDeque 等。

②、Map 接口:表示键值对的集合,一个键映射到一个值。键不能重复,每个键只能对应一个值。Map 接口的实现类包括 HashMap、LinkedHashMap、TreeMap 等。

  • 集合框架是位于java.util包下,这个包提供了两个常用的工具类:
    • Collections:提供一些对集合排序、二分查找、同步的静态方法
    • Arrays:提供了一些对数组进行排序、打印和List进行转换的静态方法;

简单介绍一下队列Queue

  • Java中的队列主要通过java.util.Queue接口和java.util.concurrent.BlockingQueue两个接口来实现;

  • PriorityQueue是一个基于优先级堆的无界队列,它的元素按照自然顺序排列或者Comparator进行排序;
    在这里插入图片描述

  • ArrayDeq ue是一个基于数组的双端队列,可以在两端插入和删除元素;
    在这里插入图片描述
    接下来,讲一下我常用的一些集合,以及它们各自的优劣

  • 在Java中,常见的集合有ArrayList、LinkedList、HashMap、LinkedHashMap等

    1. ArrayList:ArrayList 可以看作是一个动态数组,它可以在运行时动态扩容。优点是访问速度快,可以通过索引直接查到元素。缺点是插入和删除元素可能需要移动元素,效率就会降低。
    2. LinkedList:LinkedList 是一个双向链表,它适合频繁的插入和删除操作。优点是插入和删除元素的时候只需要改变节点的前后指针,缺点是访问元素时需要遍历链表。
    3. HashMap:HashMap 是一个基于哈希表的键值对集合。优点是插入、删除和查找元素的速度都很快。缺点是它不保留键值对的插入顺序。
    4. LinkedHashMap:LinkedHashMap 在 HashMap 的基础上增加了一个双向链表来保持键值对的插入顺序。

队列和栈的区别了解吗?

  • 队列是一种先进先出(FIFO, First-In-First-Out)的数据结构。在队列中,第一个加入队列的元素会是第一个被移除的。队列常用于处理按顺序来的任务。
  • 栈是一种后进先出(LIFO, Last-In-First-Out)的数据结构。在这种结构中,最后一个加入栈的元素会是第一个被移除的。这种特性使得栈非常适合于那些需要访问最新添加的数据元素的场合。

哪些是线程安全的?

  • 像Vector、HashMap、ConcurrentHashMap、CopyOnWriteArrayList、ConcurrentLinkedQueue、ArrayBlockingQueue、LinkedBlockingQueue 这些都是线程安全的。

Java集合用过哪些?

  • 我最经常用的就是封装了动态数组的ArrayList和封装了链表的LinkedList;以及键值对HashMap;

Collection继承了哪些接口?

  • Collection继承了iterable接口,这意味着所有实现了Collection接口的类都必须实现iterator()方法,之后就可以使用增强for循环遍历集合中的元素了;

相关文章:

一文回顾讲解Java中的集合框架

这篇文章以提问的方式总结回顾下Java中常见的集合框架 Java中的集合框架可以分为两条大的支线:Collection和Map Collection,主要由List、Set、Queue组成; List是有序,可重复的集合,典型代表有封装了动态数组的ArrayList和封装了链…...

多模态论文笔记——NaViT

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细解读多模态论文NaViT(Native Resolution ViT),将来自不同图像的多个patches打包成一个单一序列——称为Patch n’ Pack—…...

智能小区物业管理系统推动数字化转型与提升用户居住体验

内容概要 在当今快速发展的社会中,智能小区物业管理系统的出现正在改变传统的物业管理方式。这种系统不仅仅是一种工具,更是一种推动数字化转型的重要力量。它通过高效的技术手段,将物业管理与用户居住体验紧密结合,无疑为社区带…...

I2C基础知识

引言 这里祝大家新年快乐!前面我们介绍了串口通讯协议,现在我们继续来介绍另一种常见的简单的串行通讯方式——I2C通讯协议。 一、什么是I2C I2C 通讯协议(Inter-Integrated Circuit)是由Phiilps公司在上个世纪80年代开发的&#…...

护眼好帮手:Windows显示器调节工具

在长时间使用电脑的过程中,显示器的亮度和色温对眼睛的舒适度有着重要影响。传统的显示器调节方式不仅操作繁琐,而且在低亮度下容易导致色彩失真。因此,今天我想为大家介绍一款适用于Windows系统的护眼工具,它可以帮助你轻松调节显…...

MongoDb user自定义 role 添加 action(collStats, EstimateDocumentCount)

使用 mongosh cd mongsh_bin_path mongosh “mongodb://user:passip:port/db”这样就直接进入了对应的db 直接输入: 这样 role “read_only_role" 就获得了3个 action, 分别是 查询,列举集合,集合元数据查询 P.S: 如果没有 …...

mysql学习笔记-数据库其他调优策略

1、如何定位调优问题 用户的反馈(主要) 日志分析(主要) 服务器资源使用监控 数据库内部状况监控 2、调优的维度和步骤 第1步:选择适合的 DBMS 第2步:优化表设计 第3步:优化逻辑查询 第4步&am…...

Office / WPS 公式、Mathtype 公式输入花体字、空心字

注:引文主要看注意事项。 1、Office / WPS 公式中字体转换 花体字 字体选择 “Eulid Math One” 空心字 字体选择 “Eulid Math Two” 使用空心字时,一般不用斜体,取消勾选 “斜体”。 2、Mathtype 公式输入花体字、空心字 2.1 直接输…...

(done) MIT6.S081 2023 学习笔记 (Day6: LAB5 COW Fork)

网页:https://pdos.csail.mit.edu/6.S081/2023/labs/cow.html 任务1:Implement copy-on-write fork(hard) (完成) 现实中的问题如下: xv6中的fork()系统调用会将父进程的用户空间内存全部复制到子进程中。如果父进程很大,复制过程…...

SYN Flooding的攻击原理

SYN Flooding是一种常见的网络攻击方式,属于拒绝服务攻击(DoS)的一种,其攻击原理主要是利用了TCP协议的三次握手过程,以下是具体介绍: TCP三次握手正常流程 第一次握手:客户端向服务器发送一个…...

MYSQL--一条SQL执行的流程,分析MYSQL的架构

文章目录 第一步建立连接第二部解析 SQL第三步执行 sql预处理优化阶段执行阶段索引下推 执行一条select 语句中间会发生什么? 这个是对 mysql 架构的深入理解。 select * from product where id 1;对于mysql的架构分层: mysql 架构分成了 Server 层和存储引擎层&a…...

cmd命令行无法进入D:盘怎么办

我找到了一个方法就是 增加一个/d cd /d d: 如下图,我不仅可以进入d盘符下,还可以访问盘符下的文件夹...

CRC校验详解

CRC校验即循环冗余校验(Cyclic Redundancy Check),是基于数据计算一组效验码,用于核对数据传输过程中是否被更改或传输错误。首先看两个概念,后续会用到。 模2除法:也叫模2运算,就是结果除以2后取余数。模2除法每一位除的结果不影响其它位,即不向上一位借位,所以实际…...

windows系统本地部署deepseek及webui界面

一、官网下载ollama 二、使用ollama下载deepseek r1模型 根据显存选择多少b的参数的模型 ollama run deepseek-r1:32b 三、安装conda curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe Miniconda3-latest-Windows-x86_64.exe 四、构建…...

(算法竞赛)使用广度优先搜索(BFS)解决迷宫最短路径问题

在这个充满奇思妙想的世界里,每一次探索都像是打开了一扇通往新世界的大门。今天,我们将踏上一段特别的旅程,去揭开那些隐藏在代码、算法、数学谜题或生活智慧背后的秘密。🎉😊 所以,系好安全带&#xff0…...

Sqoop源码修改:增加落地HDFS文件数与MapTask数量一致性检查

个人博客地址:Sqoop源码修改:增加落地HDFS文件数与MapTask数量一致性检查 | 一张假钞的真实世界 本篇是对记录一次Sqoop从MySQL导入数据到Hive问题的排查经过的补充。 Sqoop 命令通过 bin 下面的脚本调用,调用如下: exec ${HAD…...

嵌入式系统|DMA和SPI

文章目录 DMA(直接内存访问)DMA底层原理1. 关键组件2. 工作机制3. DMA传输模式 SPI(串行外设接口)SPI的基本原理SPI连接示例 DMA与SPI的共同作用 DMA(直接内存访问) 类型:DMA是一种数据传输接口…...

leetcode——将有序数组转化为二叉搜索树(java)

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。 示例 1: 输入:nums [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视为正确答…...

冯诺依曼结构和进程概念及其相关的内容的简单介绍

目录 ​编辑 冯诺依曼体系结构 操作系统(Operator System) 进程 引入 基本概念 描述进程-PCB task_ struct内容分类 进程 ID (PID)和查看进程 进程状态: 进程创建: 进程终止: 进程间通信 (IPC): 冯诺依曼体系结构 冯诺依曼体系结构是现代计算机的基础架构&#xf…...

Native Memory Tracking 与 RSS的差异问题

一 问题现象 前一段时间用nmt查看jvm进程的栈区占用的内存大小。测试代码如下 public class ThreadOOM {public static void main(String[] args) {int i 1;while (i < 3000) {Thread thread new TestThread();thread.start();System.out.println("thread : "…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...