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

Java中常见的自带数据结构类

目录

一、ArrayList(动态数组)

特性

常用方法

二、LinkedList(双向链表)

特性

常用方法

三、ArrayDeque(双端队列) 

特性

常用方法

四、HashMap(哈希表)

特性

常用方法

五、TreeMap(红黑树)

特性

常用方法

六、HashSet(哈希表)

特性

常用方法

HashSet和HashMap的区别

数据结构和存储内容:

方法:

遍历方式:

七、TreeSet(红黑树)

特性

常用方法

TreeSet和TreeMap的区别 

存储内容不同:

遍历方式不同:

操作对象不同:

方法不同:

八、Stack(栈)

特性

常用方法

九、Queue(队列)

特性

常用方法

十、PriorityQueue(优先级队列)

特性

常用方法

十一、Deque(双端队列)

特性

常用方法


关山难越谁悲失路之人?萍水相逢尽是他乡之客

                                                                —— 24.10.19

一、ArrayList(动态数组)

ArrayList是 Java 中一个常用的动态数组实现类

特性

① 动态扩容:当向 ArrayList 添加元素导致容量不足时,它会自动增加内部数组的大小,以容纳更多的元素。

② 随机访问快:通过索引获取元素的时间复杂度为 O(1)

③ 插入和删除元素:中间位置插入或删除元素的时间复杂度为 O(n),因为需要移动后续元素。


常用方法

  • add(E element) 向列表末尾添加一个元素。
  • add(int index, E element) :在指定索引位置插入一个元素。
  • get(int index) :获取指定索引位置的元素。
  • remove(int index) :移除指定索引位置的元素。
  • remove(Object o) :移除指定的元素。
  • size() :返回列表中的元素个数。
  • clear() :清空列表。 
add(E element)    // 向列表末尾添加一个元素
add(int index, E element)    // 在指定索引位置插入一个元素
get(int index)    // 获取指定索引位置的元素
remove(int index)    // 移除指定索引位置的元素
remove(Object o)    // 移除指定的元素
size()    // 返回列表中的元素个数
clear()    // 清空列表

二、LinkedList(双向链表)

LinkedList 是 Java 中的一种常见数据结构

特性

1.底层数据结构是双向链表,每个节点包含数据以及指向前一个后一个节点的引用

2.插入和删除操作在特定位置时,效率通常比 ArrayList 高,尤其是在列表头部或中间位置,时间复杂度为 O (1)

3.随机访问元素的效率较低,时间复杂度为 O (n)


常用方法

  • add(E element) :在列表末尾添加元素
  • add(int index, E element) :在指定索引位置插入元素
  • get(int index) :获取指定索引位置的元素
  • remove(int index) :移除指定索引位置的元素
  • removeFirst() :移除列表的第一个元素
  • removeLast() :移除列表的最后一个元素
add(E element)    // 在列表末尾添加元素
add(int index, E element)    // 在指定索引位置插入元素
get(int index)    // 获取指定索引位置的元素。
remove(int index)    // 移除指定索引位置的元素
removeFirst()    // 移除列表的第一个元素
removeLast()    // 移除列表的最后一个元素

三、ArrayDeque(双端队列) 

ArrayDeque 是一个基于数组实现的双端队列,是一个可以同时在队列的头部和尾部进行高效的插入和删除操作的数据结构

特性

1.没有容量限制,会随着元素的添加自动扩容

2.可以作为栈(只在一端操作)或双端队列(两端均可操作)使用。

3.不允许存储 null 元素


常用方法

  • addFirst(E e) :在队列头部添加元素
  • addLast(E e) :在队列尾部添加元素
  • removeFirst() :移除并返回队列头部的元素
  • removeLast() :移除并返回队列尾部的元素
  • getFirst() :获取但不删除队列头部的元素
  • getLast() :获取但不删除队列尾部的元素
addFirst(E e)    // 在队列头部添加元素
addLast(E e)    // 在队列尾部添加元素
removeFirst()    // 移除并返回队列头部的元素
removeLast()    // 移除并返回队列尾部的元素
getFirst()    // 获取但不删除队列头部的元素
getLast()    // 获取但不删除队列尾部的元素

四、HashMap(哈希表)

HashMap 是 Java 中常用的键值对存储数据结构

特性

1.基于哈希表实现,查找、插入和删除的平均时间复杂度为 O (1) 。

2.不保证键值对的顺序。

3.允许键为 null ,但值也可为 null 。


常用方法

  • put(K key, V value) :向 HashMap 中添加键值对。
  • get(K key) :通过键获取对应的值。
  • remove(K key) :根据键移除键值对。
  • containsKey(K key) :检查是否包含指定的键。
  • size() :获取 HashMap 中的键值对数量。
put(K key, V value)    // 向 HashMap 中添加键值对get(K key)    // 通过键获取对应的值remove(K key)    // 根据键移除键值对containsKey(K key)    // 检查是否包含指定的键size()     // 获取 HashMap 中的键值对数量

五、TreeMap(红黑树)

TreeMap 是 Java 中的一种有序的键值对映射数据结构

特性

1.基于红黑树实现,元素按照键的自然顺序或者指定的比较器顺序进行排序。

2.提供了有序的键访问,例如获取第一个键、最后一个键、大于或小于给定键的键等操作。


常用方法

  • put(K key, V value) :添加键值对。
  • get(K key) :通过键获取值。
  • firstKey() :获取第一个键。
  • lastKey() :获取最后一个键。
  • lowerKey(K key) :获取小于给定键的最大键。
put(K key, V value)    // 添加键值对
get(K key)    // 通过键获取值
firstKey()    // 获取第一个键
lastKey()    // 获取最后一个键
lowerKey(K key)    // 获取小于给定键的最大键

六、HashSet(哈希表)

HashSet 是 Java 中用于存储不重复元素的集合

特性

1.基于哈希表实现,查找元素的时间复杂度接近 O (1) 。

2.不保证元素的顺序。


常用方法

  • add(E element) :向集合中添加元素。
  • remove(E element) :从集合中移除元素。
  • contains(E element) :检查集合是否包含指定元素。
  • size() :获取集合中元素的数量。
add(E element)    // 向集合中添加元素remove(E element)    // 从集合中移除元素contains(E element)    // 检查集合是否包含指定元素size()    // 获取集合中元素的数量

⭐HashSet和HashMap的区别

  1. 数据结构和存储内容:

    • HashSet 基于哈希表实现,存储的是一组不重复的元素
    • HashMap 基于哈希表实现,存储的是键值对
  2. 方法:

    • HashSet 主要方法有 add 、 remove 、 contains 等,用于操作元素
    • HashMap 主要方法有 put 、 get 、 remove 、 containsKey 等,用于操作键值对
  3. 遍历方式:

    • 遍历 HashSet 通常使用增强型 for 循环直接获取元素。
    • 遍历 HashMap 可以通过获取键集、值集或者键值对集来进行遍历。

七、TreeSet(红黑树)

TreeSet 是 Java 中一个有序且不允许重复元素的集合

特性

1.基于红黑树实现,元素按照自然顺序或者自定义的比较器顺序排列

2.有序性使得可以方便地获取集合中的第一个、最后一个元素,以及获取特定范围内的元素。


常用方法

  • add(E element) :向集合添加元素。
  • remove(E element) :移除元素。
  • first() :获取集合中的第一个元素。
  • last() :获取集合中的最后一个元素。
add(E element)    // 向集合添加元素remove(E element)    // 移除元素first()    // 获取集合中的第一个元素last()    // 获取集合中的最后一个元素

⭐TreeSet和TreeMap的区别 

  1. 存储内容不同:

    • TreeSet 存储的是一组不重复的元素
    • TreeMap 存储的是键值对
  2. 遍历方式不同:

    • TreeSet 只能遍历元素
    • TreeMap 可以遍历键、值或者键值对
  3. 操作对象不同:

    • TreeSet 的操作对象是单个元素
    • TreeMap 的操作对象是键值对
  4. 方法不同:

    • TreeSet 有 first() 、 last() 等获取集合中极值元素的方法。
    • TreeMap 有 firstKey() 、 lastKey() 等获取极值键的方法,以及 get(key) 根据键获取值的方法。

八、Stack(栈)

Stack 是一种遵循后进先出(Last-In-First-Out,LIFO)原则的数据结构

特性

1.后进先出(LIFO - Last In First Out)原则:最后进入栈的元素最先被取出。就像往一个桶里叠盘子,最后放进去的盘子会最先被拿出来。

2.操作受限:主要操作是压入(push)元素和弹出(pop)元素,以及查看栈顶元素(peek)和判断栈是否为空(empty)。

3.高效的插入和删除:在栈顶进行插入和删除操作的时间复杂度通常为 O (1) ,这些操作不需要移动大量元素。


常用方法

  • push(E item) :将元素压入栈顶
  • pop() :弹出并返回栈顶元素
  • peek() :查看栈顶元素,但不弹出
  • empty() :判断栈是否为空
push(E item)    // 将元素压入栈顶
pop()    // 弹出并返回栈顶元素
peek()    // 查看栈顶元素,但不弹出
empty()    // 判断栈是否为空

九、Queue(队列)

Queue 是一种遵循先进先出(First-In-First-Out,FIFO)原则的数据结构,即先进入队列的元素先出队列。

特性

1.元素的添加和移除按照特定的顺序进行,先进先出。

2.可以为空,并且可以查询队列是否为空以及队列中元素的数量


常用方法

  • offer(E e) :尝试将元素添加到队列末尾,如果成功返回true,如果队列已满则返回 false
  • poll() :获取并移除队列头部的元素,如果队列为空则返回 null 
  • peek() :获取但不移除队列头部的元素,如果队列为空则返回 null 
  • size() :返回队列中元素的数量
  • isEmpty() :判断队列是否为空
offer(E e)    // 尝试将元素添加到队列末尾,如果成功返回 true ,如果队列已满则返回 false 
poll()    // 获取并移除队列头部的元素,如果队列为空则返回 null 
peek()    // 获取但不移除队列头部的元素,如果队列为空则返回 null 
size()    // 返回队列中元素的数量
isEmpty()    // 判断队列是否为空

十、PriorityQueue(优先级队列)

PriorityQueue 是一个无界的优先级队列,其中的元素按照其自然顺序(或者通过提供的比较器)进行排序

特性

1.元素按照优先级进行排序,优先级高的元素先出队。

2.不允许插入 null 元素。

3.是非线程安全的。


常用方法

  • offer(E e) :将元素插入到队列中合适的位置以保持队列的优先级顺序
  • poll() :获取并移除队列头部的元素,返回并删除具有最高优先级的元素
  • peek() :获取但不移除队列头部优先级最高的元素
  • size() :返回队列中元素的个数
  • isEmpty() :判断队列是否为空
offer(E e)    // 将元素插入到队列中合适的位置以保持队列的优先级顺序
poll()    // 获取并移除队列头部的元素,返回并删除具有最高优先级的元素
peek()    // 获取但不移除队列头部优先级最高的元素
size()    // 返回队列中元素的个数
isEmpty()    // 判断队列是否为空

十一、Deque(双端队列)

Deque 是一个可以在两端进行插入和删除操作的数据结构

特性

1.支持在队列的头部和尾部添加或删除元素

2.可以作为栈(只在一端操作)或队列(两端分别进行入队和出队)使用


常用方法

  • addFirst(E e) :在队列头部添加元素
  • addLast(E e) :在队列尾部添加元素
  • removeFirst() :移除并返回队列头部的元素
  • removeLast() :移除并返回队列尾部的元素
  • getFirst() :获取但不删除队列头部的元素
  • getLast() :获取但不删除队列尾部的元素
addFirst(E e)    // 在队列头部添加元素
addLast(E e)    // 在队列尾部添加元素
removeFirst()    // 移除并返回队列头部的元素
removeLast()    // 移除并返回队列尾部的元素
getFirst()    // 获取但不删除队列头部的元素
getLast()    // 获取但不删除队列尾部的元素

相关文章:

Java中常见的自带数据结构类

目录 一、ArrayList(动态数组) 特性 常用方法 二、LinkedList(双向链表) 特性 常用方法 三、ArrayDeque(双端队列) 特性 常用方法 四、HashMap(哈希表) 特性 常用方法 五、TreeMap&…...

数据结构——链表,哈希表

文章目录 链表python实现双向链表复杂度分析 哈希表(散列表)python实现哈希表哈希表的应用 链表 python实现 class Node:def __init__(self, item):self.item itemself.next Nonedef head_create_linklist(li):head Node(li[0])for element in li[1…...

如何使用Python对Excel、CSV文件完成数据清洗与预处理?

在数据分析和机器学习项目中,数据清洗与预处理是不可或缺的重要环节。 现实世界中的数据往往是不完整、不一致且含有噪声的,这些问题会严重影响数据分析的质量和机器学习模型的性能。 Python作为一门强大的编程语言,提供了多种库和工具来帮…...

第8篇:网络安全基础

目录 引言 8.1 网络安全的基本概念 8.2 网络威胁与攻击类型 8.3 密码学的基本思想与加密算法 8.4 消息认证与数字签名 8.5 网络安全技术与协议 8.6 总结 第8篇:网络安全基础 引言 在现代信息社会中,计算机网络无处不在,从互联网到局…...

Flutter 中的 PopScope 小部件:全面指南

Flutter 中的 PopScope 小部件:全面指南 在 Flutter 应用开发中,导航和路由管理是构建复杂应用时必须面对的挑战之一。PopScope 小部件是 Flutter 2.0 版本引入的一个新功能,它提供了一种更灵活的方式来控制页面的弹出和返回行为。本文将带你…...

视频剪辑的未来

技术发展推动4: 人工智能与自动化辅助:人工智能在视频剪辑中的应用将不断深化。例如,智能剪辑软件能够自动分析视频素材的内容、情感和节奏,快速生成初步的剪辑版本,剪辑师在此基础上进行进一步的优化和调整&#xff0…...

通过PHP与API的结合,开启电商数据集成的新篇章

在数字化转型的浪潮中,电子商务数据的集成对于企业来说变得越来越重要。无论是在线零售商还是品牌商,都需要实时访问商品数据以优化库存管理、制定定价策略、提升客户体验。PHP,作为服务端脚本语言的佼佼者,为开发者提供了强大的工…...

使用 CDN 后 Apache 的日志记录客户真实 IP

经常搭建网站服务器的都知道,在给站点使用了 CDN 后 Web 应用的日志记录里就会只记录 CDN 节点 IP 了,这就没法看到真实客户请求 IP,对于日志分析、运维日常维护来说就有点儿麻烦了,今天明月结合在五洛云服务器上搭建的Apache环境…...

ORACLE 19C安装 RAC报错

1. 问题描述 在Oracle 19C RAC的安装过程中,使用克隆方式在两个节点上部署集群。当第一个节点配置好基础服务后,关机并克隆节点。当尝试在第二个节点上通过页面进行RAC安装时,出现以下错误: [INS-32070] Could not remove the n…...

省心英语 3.9.9| 资源最全面的英语学习App

省心英语是一款资源全面的英语学习软件,完全免费且无广告,内含丰富的词库和范文、中小学、四六级、考研、专四专八、雅思托福、新概念等所有阶段的学习内容。软件支持练听力、背单词、阅读理解等功能,覆盖了听说读写全方位学习。听力部分包含…...

ruoyi框架动态切换数据库

需求背景 最近需要一个小demo,项目中需要同时连接sqlserver和mysql数据库。 操作教程 1、pom.xml -- 修改common/pom.xml<!-- 动态数据源 --> <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-star…...

iba Data Export 导出面板选项

时间线选择真实时间“Absolute date / time” 时间间隔选择0.5Sec.&#xff08;最小为0.01Sec.&#xff09; 右侧数据根据需要选择...

过滤器Filter的介绍和使用

1.简介 在 Java Web 开发中&#xff0c;Filter 是一个非常重要的组件&#xff0c;用于在请求到达 Servlet 之前或响应返回客户端之前对请求和响应进行预处理或后处理。Filter 可以用来实现多种功能&#xff0c;如日志记录、权限检查、编码转换、请求头修改等。就好比机场的层层…...

JMeter之mqtt-jmeter 插件介绍

前言 mqtt-jmeter插件是JMeter中的一个第三方插件&#xff0c;用于支持MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议的性能测试。MQTT是一种轻量级的发布/订阅消息传输协议&#xff0c;广泛应用于物联网和传感器网络中。 一、安装插件 mqtt-jmeter项目…...

Nacos2.3.2在ubuntu中的部署

Nacos2.3.2 在ubuntu下的部署 下载地址 发布历史 | Nacos 官网 https://download.nacos.io/nacos-server/nacos-server-2.3.2.zip 修改 application.properties文件 开启鉴权 ### 开启鉴权功能 nacos.core.auth.caching.enabledtrue ### The auth system to use, current…...

Xilinx远程固件升级(一)——QuickBoot方案

Xilinx 7系FPGA远程更新方案——QuickBoot方式远程更新bit 一、远程更新背景和架构 对于非ZYNQ系列的常规FPGA来说&#xff0c;对于bit的更新一般使用JTAG进行烧录。而作为商用产品&#xff0c;想要进行OTA升级时&#xff0c;使用JTAG的升级方式显然不适合&#xff0c;因此&a…...

O(1)调度算法与CFS

目录 引言 linux内核的O&#xff08;1&#xff09;进程调度算法介绍 主要特点 工作原理 优点 缺点 运行队列 活动队列 过期队列 active指针和expired指针 O(1)调度器&#xff0c;两个队列的机制 两个队列的机制如下&#xff1a; 这个算法后期被CFS替代 CFS 工作原…...

SpringBoot——静态资源访问的四种方式

1.默认的静态资源目录 /static /public /resources /META-INF/resources 动态资源目录&#xff1a;/templates 2.resources静态资源目录图片存放 3. 静态资源访问 3.1.通过路径访问静态资源 http://localhost:8080/a.jpg http://localhost:8080/b.jpg …...

WPF中的Style如何使用

在 WPF 中&#xff0c;Style 是一个非常重要的概念&#xff0c;它用于定义控件的默认外观和行为。以下是如何使用 Style 的一些基本步骤和示例&#xff1a; 1. 定义 Style 资源 通常在 XAML 的资源部分&#xff08;ResourceDictionary&#xff09;中定义样式。 2. 指定 Targ…...

数据分析案例-欺诈性电子商务交易数据集可视化分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

WEB3全栈开发——面试专业技能点P7前端与链上集成

一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染&#xff08;SSR&#xff09;与静态网站生成&#xff08;SSG&#xff09; 框架&#xff0c;由 Vercel 开发。它简化了构建生产级 React 应用的过程&#xff0c;并内置了很多特性&#xff1a; ✅ 文件系…...

CMS内容管理系统的设计与实现:多站点模式的实现

在一套内容管理系统中&#xff0c;其实有很多站点&#xff0c;比如企业门户网站&#xff0c;产品手册&#xff0c;知识帮助手册等&#xff0c;因此会需要多个站点&#xff0c;甚至PC、mobile、ipad各有一个站点。 每个站点关联的有站点所在目录及所属的域名。 一、站点表设计…...

性能优化中,多面体模型基本原理

1&#xff09;多面体编译技术是一种基于多面体模型的程序分析和优化技术&#xff0c;它将程序 中的语句实例、访问关系、依赖关系和调度等信息映射到多维空间中的几何对 象&#xff0c;通过对这些几何对象进行几何操作和线性代数计算来进行程序的分析和优 化。 其中&#xff0…...