常用数据结构总结-Java版
常用数据结构总结(Java版)
C++/Java/Python 数据结构大比较
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dokzp1HQ-1677329125447)(assets/image-20220116142815859.png)]
array
同一种类型数据的集合,其实数组就是一个容器。数组中的元素从0开始编号,方便操作这些元素。
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
元素类型[] 数组名 = new 元素类型[]{元素, 元素, ...};
多维数组
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一元素都是一个一维数组。
type[][] typeName = new type[typeLength1][typeLength2];
Arrays 类
java.util.Arrays 类能方便地操作数组
- 给数组赋值:fill方法
- 对数组排序:sort方法
- 比较数组:equals方法
- 查找数组元素:binarySearch方法能对排好序地数组进行二分查找
dynamic array
ArrayList类是一个特殊地数组——动态数组,通过添加和删除元素,就可以改变数组地长度。
优点:
- 支持自动改变大小
- 可以灵活的插入元素
- 可以灵活的删除元素
初始化:
ArrayList<Integer> arrayList = new ArrayList<>();
添加元素:
add(Object value):将指定元素追加到末尾
add(int index, Object value):在指定位置index,添加新的元素
删除元素:
remove():从集合中删除指定位置处的元素,返回该元素
// 根据对象删除
arrayList.remove("test");
// 根据下标删除
arrayList.remove(1);
获取长度:
size():用于获取ArrayList的大小,返回列表中的元素个数
清空:
clear():清空集合中的所有元素
获取元素:
get(int index):返回集合中指定位置上的元素
list
LinkedList是一个双向链表,它也可以被当作堆栈、队列或双端队列进行操作。
LinkedList<E> list = new LinkedList<>();
addFirst():在头部添加元素
addLast():在尾部添加元素
removeFirst():在头部移除元素
removeLast():在尾部移除元素
getFirst():获取头部元素
getLast():获取尾部元素
OrderedSet
TreeSet是一个有序集合
- 存储唯一的元素
- 不保留元素的插入顺序
- 按升序对元素进行排序
- 线程不安全
Set<String> treeSet = new TreeSet<>();
add():添加元素,成功返回true,否则返回false
contains():检查一个给定的元素是否存在于集合中
remove():从集合中移除指定元素
first():返回第一个元素
last():返回最后一个元素
OrderedMap
TreeMap是一个能比较元素大小的Map集合,会对传入的key进行大小排序。其中,可以使用元素的自然顺序,也可以使用集合中自定义的比较器来进行排序。
TreeMap具有如下特点:
- 不允许出现重复的key
- 可以出入null键,null值
- 可以对元素进行排序
- 无序集合(插入和遍历顺序不一致)
TreeMap<String,Integer> treeMap = new TreeMap<>();
put():新增元素
get():获取元素
keySet():获取所有key
values():获取所有值
HashSet
HashSet是基于HashMap来实现的,是一个不允许有重复元素的集合。
允许有null值
无序的,即不会记录插入的顺序
线程不安全
Set<String> set = new HashSet<>();
add():添加元素
contains():判读元素是否存在
remove():删除元素
size():返回集合的大小
HashMap
HashMap是一个散列表,它存储的内容是键值对(key-value)映射。
Map<String,Integer> map = new HashMap<>();
put():放入元素
get():取出元素
size():返回集合的大小
clear():清空集合
remove():删除元素
heap
优先队列PriorityQueue是Queue接口的实现,可以对其中的元素进行排序。
PriorityQueue<Integer> q = new PriorityQueue<>();
常用方法:
// 返回队首元素
peek();
// 返回队首元素,队首元素出队
poll();
// 添加元素
add();
// 返回队列元素的个数
size();
// 判断队列是否为空,为空返回true,不空返回false
isEmpty();
queue
队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。
LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。
Queue<String> q = new LinkedList<>();
offer():添加元素
peek():查询头部元素
poll():从队列中删除第一个元素
deque
Deque是一个双端队列接口,继承自Queue接口,Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中LinkedList是最常用的。
Deque<Integer> q = new LinkedList<>();
除了Queue接口中可用的方法之外,Deque还包括以下方法:
- addFirst() - 在双端队列的开头添加指定的元素。如果双端队列已满,则引发异常。
- addLast() - 在双端队列的末尾添加指定的元素。如果双端队列已满,则引发异常。
- offerFirst() - 在双端队列的开头添加指定的元素。如果双端队列已满,则返回false。
- offerLast() - 在双端队列的末尾添加指定的元素。如果双端队列已满,则返回false。
- getFirst() - 返回双端队列的第一个元素。如果双端队列为空,则引发异常。
- getLast() - 返回双端队列的最后一个元素。如果双端队列为空,则引发异常。
- peekFirst() - 返回双端队列的第一个元素。如果双端队列为空,则返回null。
- peekLast() - 返回双端队列的最后一个元素。如果双端队列为空,则返回null。
- removeFirst() - 返回并删除双端队列的第一个元素。如果双端队列为空,则引发异常。
- removeLast() - 返回并删除双端队列的最后一个元素。如果双端队列为空,则引发异常。
- pollFirst() - 返回并删除双端队列的第一个元素。如果双端队列为空,则返回null。
- pollLast() - 返回并删除双端队列的最后一个元素。如果双端队列为空,则返回null。
stack
Java堆栈 Stack类已经过时,Java官方推荐使用Deque替代Stack使用。
Deque堆栈操作的方法:push()、pop()、peek()
相关文章:
常用数据结构总结-Java版
常用数据结构总结(Java版) C/Java/Python 数据结构大比较 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dokzp1HQ-1677329125447)(assets/image-20220116142815859.png)] array 同一种类型数据的集合,其实数组…...
【基础算法】二分例题(我在哪?)
🌹作者:云小逸 📝个人主页:云小逸的主页 📝Github:云小逸的Github 🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前…...
怕上当?来看这份网络钓鱼和诈骗技术趋势
网络钓鱼和诈骗:当前的欺诈类型 网络钓鱼 钓鱼者可以攻击任何在线服务——银行、社交网络、政府门户网站、在线商店、邮件服务、快递公司等——中的证书。但是,顶级品牌的客户往往面临更大风险,因为相比小品牌,人们更喜欢使用和…...
2023年全国最新保安员精选真题及答案6
百分百题库提供保安员考试试题、保安职业资格考试预测题、保安员考试真题、保安职业资格证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 61.关于保安员职业资格条件说法正确的是()。 A:必须考试合格…...
unity热更新新方案,ILRuntime
ILRuntime 是一个独立的、跨平台的 .NET Runtime,可用于在 Unity 中实现热更功能。使用 ILRuntime,您可以在游戏运行时加载和执行 C# 脚本,而不需要重新编译整个项目。 以下是一些使用 ILRuntime 的基本步骤: 在 Unity Asset St…...
【J1】【队列】报数游戏
题目描述 有 n 个小朋友围成一圈玩游戏,小朋友从 1 至 n 编号,2 号小朋友坐在 1 号小朋友的顺时针方向,3 号小朋友坐在 2 号小朋友的顺时针方向,……,1 号小朋友坐在 n 号小朋友的顺时针方向。 游戏开始,…...
《程序员的自我修养》阅读笔记
文章目录【第2部分】静态链接1 编译过程2 编辑器的工作流程3 链接——模块的拼接4 目标文件目标文件中的段(section)ELF文件结构5 静态链接1 空间与地址分配2 符号解析与重定位【第3部分】装载与动态链接1 装载的方式2 进程的启动3 为什么需要动态链接&a…...
【跟着ChatGPT学深度学习】ChatGPT带我入门深度学习
❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...
软工2023个人作业一——阅读和提问
项目内容这个作业属于哪个课程2023年北航敏捷软件工程这个作业的要求在哪里个人作业-阅读和提问我在这个课程的目标是学习并掌握现代软件开发和项目管理技术,体验敏捷开发工作流程这个作业在哪个具体方面帮助我实现目标通读《构建之法》,了解软件工程中基…...
【Redis】线程模型:Redis是单线程还是多线程?
【Redis】线程模型:Redis是单线程还是多线程? 文章目录【Redis】线程模型:Redis是单线程还是多线程?Redis 是单线程吗?Redis 单线程模式是怎样的?Redis 采用单线程为什么还这么快?Redis 6.0 之前…...
FSM(有限状态机)
FSM有限状态机FSM创建控制有限状态机的脚本设置FSM状态机下的各个状态添加测试类FSM的优点FSM 虽然Unity已经有了动画状态机,但是为了代码的开放封闭原则,这时FSM有限状态机的作用就凸显了出来。 创建控制有限状态机的脚本 先创建一个脚本用来控制有限…...
奇妙的background-clip:text
我们在学习CSS3时,一个背景属性background-clip用来对背景进行裁剪,即指定背景绘制的区域,通常我们使用的几个属性如下:值说明border-box默认值。背景绘制在边框方框内(剪切成边框方框)。padding-box背景绘…...
Vmware虚拟机无法联通主机解决方法二
昨天在遇到了VMware 虚拟机无法联通主机,导致我在CentOS-7 搭建的伪Hadoop3 服务,无法访问管理平台,使用将网络编辑器修改为“桥接”模式解决。今天在学习HBase 时,昨天的问题又重新了,我通过SSH 工具MobaXterm 都无法…...
Boost资料整理备忘
Boost资料整理备忘 网络资源 书籍: The Boost C Libraries官方文档 Boost Library Documentation random boost.randomBoost随机库的简单使用:Boost.Random(STL通用)tutorialstd::random boost::asio Boost.Asio 网络编程 - 基本原理Boost.Asio DocBoost定时器 网…...
规则引擎与风控系统01:新问题,新挑战
如果说在支付系统中使用设计模式,以及开发自定义协议的物联网这两类应用还不够酷的话,那么接下来,咱们就来学一点高逼格的技术吧。 在互联网已经日益普遍的时代,不管是开发2C应用还是2B应用,相信大部分的开发者都有过处理复杂业务逻辑的经历,比如电商、社交、电子政务、O…...
Oracle-00-卸载篇
这里给出企业级的Oracle 10g的卸教程,新安装的19c并没有正经去做卸载的操作,为了后面教程的进度,这里就先借用下10g,如果有需要会重新更新19c的卸载教程 windows服务中将Oracle所有服务全部停掉 选中Oracle - OraDb10g_home2->Oracle Installation Products->Univers…...
Java线程池使用与原理解析1(线程池优点、使用方法、参数含义及线程池运转机制)
为什么要使用线程池? JDK1.5后JUC包添加了线程池相关接口,在Java诞生之初并没有线程池这个概念。刚开始Java程序都是自行创建线程去处理任务。随着应用使用的线程越来越多,JDK开发者们发现有必要使用一个统一的类来管理这些线程,…...
windows下编译leveldb(动态库+静态库)
环境准备 1)下载cmake并安装 下载路径: https://cmake.org/download/2)下载leveldb源码 git clone https://github.com/google/leveldb.git3)下载googletest和benchmark,cmake编译时需要 # 进入leveldb源码路径下的third_part…...
如何用76行代码写一个AI微信机器人......
本期博客主要介绍如何使用 微信SDK 和 AI聊天接口 ,实现 微信机器人功能。 准备 电脑需要安装Go环境,这个可以直接参考菜鸟教程:Go 语言环境安装,知道CSDN的同学基本能在半小时内装好吧…(可选)一个编译器…...
拿下域控后,我还是对大佬的操作念念不忘
历来攻防演练中,我都笃信一个道理——吃饱了才有力气干活。所以,在清晨的客户现场,当看到大佬满意地吃完了我带来的煎饺,我知道这一战,我们作为攻击队,基本已经拿下了。 虽然说的每一句话都带着一股醋味儿…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
