java——顺序表

前言:顺序表是线性表的一种,它是较于数组更加灵活的一种储存方式。线性表通常是逻辑上是连续的一条直线,但在物理上不是连续的。java中已经实现好了一个顺序表,搭配泛型可以支持各种类型的使用,下面就来介绍该如何使用。

ArrayList简介

在集合框架中,ArrayList是一个普通的类,实现了List接口。

ArrayList是以泛型方式实现的,使用必须先实例化。底层逻辑是一段连续的空间,可以支持动态扩容,是一个动态类型顺序表。

和Vector不同,ArrayList不是线程安全,在单线程可以使用,多线程得选择Vector或CopyOnWriteArrayList。

ArrayList内部实现

ArrayList内部:

可以看到,list内部有几个重要的成员变量:

ArrayList扩容机制

在使用add来进行扩容时,我们可以看到是由上述图来实现1.5倍的扩容,在插入元素的时候会自动检测扩容。

ArrayList的构造方法

ArrayList(int initialCapacity)

指定顺序表初始容量

给定一个形参,他会初始化一个指定初始化容量大小的类型数组,用来存放数据。

看看内部实现:

这个非常好理解,可以看见,要是给定的大小合法,则会直接创立一个新对象数组来赋给ArrayList的成员变量elementData(ArrayList操作的时候都是使用该数组)若是给定大小为零,则直接传一个ArrayList的成员变量的空数组。若是给定大小小于零,则直接报错。

ArrayList(Collection <? extends E>c)

利用其他Collection来构建ArrayList

我们可以看到,使用这个构造方法可以直接初始化构建一个顺序表。

内部实现:

这里的“?”代表通配符,整体意思就是:
1.<>里面只要实现了Collection接口都是可以传参的,如:

上述的图片中可以看到List实现了Collection接口,所有实现了Collection接口的都可以传入

2.这里的E代表着通配符的上界,意味着要么是E要么是c(E的子类)

经上述的细节之后,才能真正初始化构建一个带有顺序表的顺序表。

ArrayList()

无参构造

直接创立的无参顺序表

可以看见,内部只有简简单单的一个赋值,赋的是空的数组。

但是,我们可以使用add方法来初始化一下顺序表。使用add方法时(如上述ArrayList扩容机制讲到),采用的是扩容的方法来帮助这个空表初始化,通常默认为10,也就实现了该顺序表为空的状态。

ArrayList常见操作

如图:

这里只演示比较容易出错的的方法:

1.remove(int ···) 和 remove(Object ···)

第一个通俗易懂,就是删除下标,但是第二个就容易和第一个混淆。比如在Integer类型顺序表中,系统会无法分辨传入的是下标还是元素:

所以第二个remove通常是这样写:

2.subList(int···,int···)

这个是截取部分内容(前闭后开区间),但注意的是,截取后并不会建立新的对象,只是拿到了截取到部分的地址而已:

ArrayList遍历方法

有三种方法可以遍历:

for - i:

for - each:

迭代器(iterator ,listIterator):

俩个迭代器的区别在于一个需要传入元素个数参数,一个不用。一个可以实现从后往前迭代,一个不能。

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

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

相关文章

Mysql疑难报错排查 - Field ‘XXX‘ doesn‘t have a default value

项目场景&#xff1a; 数据库环境 &#xff1a;mysql8; 工程使用&#xff1a;MyBatisPlus 表情况&#xff1a; 问题描述 某一个插入语句使用了 MyBatisPlus 的 save 方法&#xff0c;因为end_time1 end_time2都并没有值&#xff0c;所以在MyBatisPlus默认情况下&#xff0c;…

如何使自己写的代码易读易懂?

〓● 如果代码可读性不佳、不容易理解&#xff0c;可能造成如下问题&#xff1a; 〓❏ 其他工程师浪费时间解读它&#xff1b; 〓❏ 误解导致引入缺陷&#xff1b; 〓❏ 其他工程师修改时破坏代码。 〓● 提高代码可读性&#xff0c;有时候可能使其变得更为冗长、占用更多的…

【Python】深入认识Python数据类型和变量

​​​​ 文章目录 1. 引言数据类型的重要性Python中的数据类型概述 2. 数字类型整型&#xff08;int&#xff09;浮点型&#xff08;float&#xff09;复数&#xff08;complex&#xff09; 3. 字符串类型字符串的定义与使用字符串操作方法 4. 布尔类型布尔值和布尔运算 5. 列…

docker网络详解

1. 网络模式 1.1 网络结构 当安装Docker以后&#xff0c;会自动创建三个网络。可以使用docker network ls命令列出这些网络。 $ docker network ls NETWORK ID NAME DRIVER SCOPE 440aefe8afa3 bridge bridge local aa8d6325580f host host …

chat-glm4,qwen1.5性能对比

modelMMLUC-EvalGSM8KHumanEvalglm-4-9b74.777.184.070.1qwen1.5-7b6174.162.536.0qwen1.5-14b67.678.770.137.8 数据来源是以下两个图。可以看到GLM4非常优秀&#xff0c;qwen应该也快要开源自己的新模型了&#xff0c;希望国内的大模型团队能够继续坚持&#xff0c;持续努力&…

AI框架之Spring AI与Spring Cloud Alibaba AI使用讲解

文章目录 1 AI框架1.1 Spring AI 简介1.2 Spring AI 使用1.2.1 pom.xml1.2.2 可实现的功能 1.3 Spring Cloud Alibaba AI1.4 Spring Cloud Alibaba AI 实践操作1.4.1 pom.xml1.4.2 配置文件1.4.3 对接文本模型1.4.4 文生图模型1.4.5 语音合成模型 1 AI框架 1.1 Spring AI 简介…

NSSCTF-Web题目5

目录 [SWPUCTF 2021 新生赛]error 1、题目 2、知识点 3、思路 [LitCTF 2023]作业管理系统 1、题目 2、知识点 3、思路 [HUBUCTF 2022 新生赛]checkin 1、题目 2、知识点 3、思路 [SWPUCTF 2021 新生赛]error 1、题目 2、知识点 数据库注入、报错注入 3、思路 首先…

vue 文件预览mp4、txt、pptx、xls、xlsx、docx、pdf、html、xml

vue 文件预览 图片、mp4、txt、pptx、xls、xlsx、docx、pdf、html、xml 最近公司要做一个类似电脑文件夹的功能&#xff0c;支持文件夹操作&#xff0c;文件操作,这里就不说文件夹操作了&#xff0c;说说文件预览操作&#xff0c;本人是后端java开发&#xff0c;前端vue&#…

Linux系统安装APITable详细流程与远程访问本地平台数据分析

文章目录 前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 &#x1f4a1;推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击跳转到网站】 前言 v…

AMD显卡和英伟达显卡哪个好?

显卡是计算机中负责处理图形和视频输出的硬件设备&#xff0c;主要分为两种类型&#xff1a;AMD的A卡和NVIDIA的N卡。那么AMD显卡和英伟达显卡哪个好&#xff1f;怎么选&#xff1f; 答&#xff1a;不能一概而论地说哪个好&#xff0c;因为它们各有优势&#xff0c;选择应基于…

RE_RC4加密

之前做的几道题目&#xff0c;rc4也是经常遇到&#xff0c;今来系统学学&#xff0c;记录一下 对称加密&#xff0c;即加密和解密的密钥可以相互推导&#xff0c;也有的是相同的。 RC4 是以字节流处理每一个字节&#xff0c;而不是 DES 的分组操作。 包含三个参数&#xff1…

探索通信技术的未来:2024中国通信技术和智能装备产业博览会

探索通信技术的未来&#xff1a;2024通信技术产业专场 随着信息技术的飞速发展&#xff0c;通信技术已成为现代社会不可或缺的基础设施。2024年10月11日至13日&#xff0c;青岛将迎来一场通信技术的盛会——2024中国军民两用智能装备与通信技术产业博览会。本次博览会不仅将展…

面试(03)————多线程

目录 一、线程和进程的区别&#xff1f; 二、并行和并发的区别&#xff1f; 三、线程创建的方式有哪些&#xff1f; 3.1、继承Thread类 3.2、实现Runnable接口 3.3、实现Callable接口 3.4、线程池 四、Runnable和Callable的区别&#xff1f; 五、在启动线程的时候&am…

书生·浦语大模型全链路开源体系-笔记作业4

XTuner 微调 LLM:1.8B、多模态、Agent 引自&#xff1a;Tutorial/xtuner/personal_assistant_document.md at camp2 InternLM/Tutorial GitHub 1. XTuner介绍 引自&#xff1a;欢迎来到 XTuner 的中文文档 — XTuner 0.1.18.dev0 文档 1.1. 什么是 XTuner &#xff1f; X…

修改缓存供应商--EhCache

除了我们默认的缓存形式simlpe之外, 我们其实还有许多其他种类的缓存供应 Ehcache就是其中的一种形式 Ehcache在SpringBoot当中的使用: 其实跟我们之前整合第三方的资源是一样的形式 1>导入依赖: <!-- 更换缓存, 将默认使用的 Simple 更换为Ehcache--> <depe…

【go】windows环境设置goos

场景 本地环境&#xff1a;windows 生产环境&#xff1a;linux 现想在本地将go脚本编译为可执行二进制文件&#xff0c;转移至生产中进行运行测试。但go build不生效。 方案&#xff08;修改GOOS&#xff09; cmd打开命令行&#xff0c;执行go env查看本地go环境&#xff0c…

PPT视频如何16倍速或者加速播放

有两种方式&#xff0c;一种是修改PPT本身&#xff0c;这种方式非常繁琐&#xff0c;不太推荐&#xff0c;还有一种就是修改视频本身&#xff0c;直接让视频是16倍速的视频即可。 如何让视频16倍速&#xff0c;我建议人生苦短&#xff0c;我用Python&#xff0c;几行代码&…

基本元器件 - 电阻

目录 电阻的选型 贴片封装的参数 电阻的阻值 丝印表示方法 标准电阻取值 电阻的失效 0 欧姆电阻的使用 电阻的使用场景 分压电路 分流电路 限流电路 阻抗匹配电路 RC 充放电电路 上下拉电路 其他电路 电阻的选型 一般来说&#xff0c;要考虑以下四个因素&…

【大模型】基于Hugging Face调用及微调大模型(1)

文章目录 一、前言二、Transformer三、Hugging Face3.1 Hugging Face Dataset3. 2 Hugging Face Tokenizer3.3 Hugging Face Transformer3.4 Hugging Face Accelerate 四、基于Hugging Face调用模型4.1 调用示例4.2 调用流程概述4.2.1 Tokenizer4.2.2 模型的加载4.2.3 模型基本…

软信天成:告别数据脏乱差!企业数据清洗实战方案分享

低质量数据普遍存在。据统计&#xff0c;数据质量问题每年给企业造成高达3.1万亿美元的损失。为了防范这种损失&#xff0c;越来越多的企业采用数据清洗来清洗数据&#xff0c;提高数据质量。 数据清洗&#xff0c;顾名思义是将数据上“脏”的部分清洗掉&#xff0c;让数据变得…