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的区别
-
数据结构和存储内容:
HashSet基于哈希表实现,存储的是一组不重复的元素HashMap基于哈希表实现,存储的是键值对
-
方法:
HashSet主要方法有add、remove、contains等,用于操作元素HashMap主要方法有put、get、remove、containsKey等,用于操作键值对
-
遍历方式:
- 遍历
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的区别
-
存储内容不同:
TreeSet存储的是一组不重复的元素TreeMap存储的是键值对
-
遍历方式不同:
TreeSet只能遍历元素TreeMap可以遍历键、值或者键值对
-
操作对象不同:
TreeSet的操作对象是单个元素TreeMap的操作对象是键值对
-
方法不同:
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,如果队列已满则返回falsepoll():获取并移除队列头部的元素,如果队列为空则返回nullpeek():获取但不移除队列头部的元素,如果队列为空则返回nullsize():返回队列中元素的数量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: 人工智能与自动化辅助:人工智能在视频剪辑中的应用将不断深化。例如,智能剪辑软件能够自动分析视频素材的内容、情感和节奏,快速生成初步的剪辑版本,剪辑师在此基础上进行进一步的优化和调整࿰…...
通过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.(最小为0.01Sec.) 右侧数据根据需要选择...
过滤器Filter的介绍和使用
1.简介 在 Java Web 开发中,Filter 是一个非常重要的组件,用于在请求到达 Servlet 之前或响应返回客户端之前对请求和响应进行预处理或后处理。Filter 可以用来实现多种功能,如日志记录、权限检查、编码转换、请求头修改等。就好比机场的层层…...
JMeter之mqtt-jmeter 插件介绍
前言 mqtt-jmeter插件是JMeter中的一个第三方插件,用于支持MQTT(Message Queuing Telemetry Transport)协议的性能测试。MQTT是一种轻量级的发布/订阅消息传输协议,广泛应用于物联网和传感器网络中。 一、安装插件 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来说,对于bit的更新一般使用JTAG进行烧录。而作为商用产品,想要进行OTA升级时,使用JTAG的升级方式显然不适合,因此&a…...
O(1)调度算法与CFS
目录 引言 linux内核的O(1)进程调度算法介绍 主要特点 工作原理 优点 缺点 运行队列 活动队列 过期队列 active指针和expired指针 O(1)调度器,两个队列的机制 两个队列的机制如下: 这个算法后期被CFS替代 CFS 工作原…...
SpringBoot——静态资源访问的四种方式
1.默认的静态资源目录 /static /public /resources /META-INF/resources 动态资源目录:/templates 2.resources静态资源目录图片存放 3. 静态资源访问 3.1.通过路径访问静态资源 http://localhost:8080/a.jpg http://localhost:8080/b.jpg …...
WPF中的Style如何使用
在 WPF 中,Style 是一个非常重要的概念,它用于定义控件的默认外观和行为。以下是如何使用 Style 的一些基本步骤和示例: 1. 定义 Style 资源 通常在 XAML 的资源部分(ResourceDictionary)中定义样式。 2. 指定 Targ…...
数据分析案例-欺诈性电子商务交易数据集可视化分析
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
