【数据结构】顺序表与线性表之ArrayList

news2024/11/25 18:47:23

目录

一、顺序表与线性表的概念

1、顺序表

2、线性表

二、Java里的集合类之ArrayList

1、ArrayList与顺序表

2、认识ArrayList

1.构造方法

2.常用方法

3.遍历ArrayList的几个方法

4.扩容机制

 三、模拟实现ArrayList

1、字段

2、构造方法

3、常用方法

1.判满

2.判空

3.遍历

4.是否存在

5.新增

6.指定位置插入

7.删除指定下标元素

​8.删除第一次出现的key

9.获取某元素的下标

10.获取指定下标位置的元素

​ 11.指定的下标位置更改指定值 

 12.指定值最后出现的下标

13.获取有效数据个数

14.置空顺序表


一、顺序表与线性表的概念

1、顺序表

是用一段物理地址连续的的存储单元依次存储数据的线性结构,一般情况下采用数组进行数据存储,删除或插入数据时需要移动数据,它物理地址连续,存储单元连续,数据元素的存储连续,不能跳跃式的存储,一般采用数组存储,在数组上完成增删查改等功能

2、线性表

是具有n个相同特性的数据元素的有限序列,在逻辑上连续但是在物理地址上不一定连续,常见的线性表有:链表、栈、队列

二、Java里的集合类之ArrayList

1、ArrayList与顺序表

ArrayList实现了RandomAccess接口所以,ArrayList支持随机访问;他也实现了Cloneable接口,所以他支持clone;他也实现了Serializable接口,说明他可以支持序列化,与老版本的Vector不同的是,ArrayList不是线程安全的,即他在单线程下可以使用但是在多线程里不能直接使用,在多线程且读数据次数多于写数据的情况下更推荐使用CopyOnWriteArrayList,或者使用ArrayList时自己加锁也可以,最后ArrayList底层是数组是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表

2、认识ArrayList

1.构造方法

构造方法说明
ArrayList()无参构造方法,长度为默认值0
ArrayList(Collection<? extends E> c)使用Collection构建
ArrayList(int initialCapacity)指定其初始长度

2.常用方法

常用方法
boolean add(E e)在结尾插入数据e
void add(int index,E e)将数据插到指定的下标位置
boolean addAll(Collection<? extends E> c)将数据c的元素尾插入当前顺序表
E remove(int index>删除指定下标元素
boolean remove(Object o)删除第一次出现的元素o
E get(int index)获取指定下标的元素
void clear()清空顺序表
E set(int index,E e)将指定下标位置的元素替换为e
boolean contains(Object o)判断元素o是否存在于当前顺序表
int indexOf(Object o)返回第一个o所在下标
int lastIndexOf(Object o)返回最后的o所在下标
List<E> subList(int fromIndex,int toIndex)截取部分list
int size()获取当前有效数据个数

3.遍历ArrayList的几个方法

主要有三种:for循环 foreach 迭代器

public static void main(String[] args) {
        //创建实例指定大小
        ArrayList<Integer> arrayList = new ArrayList<>(10);
        System.out.println(arrayList.size());

        //插入数据
        for (int i = 0; i < 10; i++) {
            arrayList.add(i);
        }

        //遍历
        for (int i = 0; i < arrayList.size(); i++) {
            System.out.print(arrayList.get(i) +"  ");
        }

        System.out.println("\n---------------------");
        for (Integer x:arrayList) {
            System.out.print(x + " ");
        }

        System.out.println("\n---------------------");
        Iterator<Integer> it = arrayList.iterator();
        while(it.hasNext()){
            System.out.print(it.next() + " ");
        }
    }

4.扩容机制

1.无参构造扩容

构造时不传入参数,默认长度为0

 

此时数组为空,调用add进行插入数据

此时由于无参构造,所以此时的size=0,size+1为1,带着参数进入enSureCapacityInternal方法

 

此时进入 enSureCapacityInternal方法后又进入calculateCapacity(底层的数组,1)

此时返回 DEFAULT——XAPACITY与1的最大值即为10

函数执行完回到 enSureCapacityInternal方法

 此时进入ensureExplicitCapacity(10)

此时进入扩容方法

 到此处长度扩容为10

2.传入指定长度构造10

 此处可以发现,传入指定长度如果满足要求即创建指定长度的数组,如果为0则跟无参构造相同,如果传入值不合法则抛异常

此时若add了10给数据,此时再add即进入扩容

进入了 enSureCapacityInternal方法

又进入calculateCapaciyt

 此方法执行完返回11,回到enSureCapacityInternal方法里执行ensureExplictCapacity(11)

此时进入grow进行扩容

 综上当使用无参构造时,第一次扩容了10,后续扩容以1.5倍进行

 三、模拟实现ArrayList

1、字段

2、构造方法

3、常用方法

1.判满

 

2.判空

 

3.遍历

 

4.是否存在

5.新增

此处值得注意的是,扩容时使用的copyOf方法,在使用时,如果传入的数组为空会空指针异常,或者传入扩容的数值是负数就会抛出异常,所以进行处理

6.指定位置插入

 

 7.删除指定下标元素

 

 8.删除第一次出现的key

9.获取某元素的下标

10.获取指定下标位置的元素

 11.指定的下标位置更改指定值 

 12.指定值最后出现的下标

13.获取有效数据个数

 

14.置空顺序表

 

 

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

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

相关文章

10.1、Django入门

文章目录预备知识MVC模式和MTV模式MVC模式MTV 模式Django框架Django框架简介Django框架的应用启动后台admin站点管理数据库迁移创建管理员用户管理界面本地化创建并使用一个应用bookapp预备知识 HTTP协议就是客户端和 服务器端之间数据传输的格式规范&#xff0c;格式简称为“…

教你搭建FTP文件共享服务器

一、什么是FTP FTP—文件传输协议&#xff08;File Transfer Protocol&#xff0c;FTP&#xff09;是用于在网络上进行文件传输的一套标准协议&#xff0c;它工作在 OSI 模型的第七层&#xff0c; TCP 模型的第四层&#xff0c; 即应用层&#xff0c; 客户在和服务器建立连接前…

BCN基团TAMRA-BCN-PEG4-endo,endo-BCN-PEG4

中文名&#xff1a;endo-BCN-四聚乙二醇-四甲基罗丹明 英文名&#xff1a;endo-BCN-PEG4-TAMRA&#xff0c;TAMRA-BCN-PEG4-endo CAS号&#xff1a;N/A 化学式&#xff1a;C46H56N4O10 分子量&#xff1a;824.97 产品描述&#xff1a; TAMRA-BCN-PEG4-endo包含 TARMA 染料和 …

分布式系统(数据复制与一致性)

文章目录ReplicationCAP ConjectureData-centric Consistency ModelsSequential ConsistencyCausal ConsistencyEntry ConsistencyEventual ConsistencyClient-centric Consistency ModelsMonotonic Read ConsistencyMonotonic Writes ConsistencyRead Your Writes Consistency…

Python学习基础笔记五十三——单继承

1、派生属性&#xff1a; 当然子类也可以添加自己的新的属性或者在这里重新定义这些属性&#xff08;不会影响到父类&#xff09;&#xff0c;需要注意的是&#xff0c;一旦重新定义了自己的属性且与父类重名&#xff0c;那么调用新增的属性&#xff0c;就以自己为准了。 例1…

在Windows中使用Nginx配置部署springboot+vue项目

Nginx 链接&#xff1a;https://pan.baidu.com/s/1c-9JJ3e63rNNeSRuEFh0Ow?pwdaamb 提取码&#xff1a;aamb 配置 解压后进入到 conf 目录下&#xff0c;修改 nginx.conf 文件&#xff0c;将下面的内容直接复制粘贴进去即可。 events {worker_connections 1024; ## Defa…

分享即时通讯音视频开发编码标准

即时通讯应用中的实时音视频技术&#xff0c;几乎是IM开发中的最后一道高墙。原因在于&#xff1a;实时音视频技术 音视频处理技术 网络传输技术 的横向技术应用集合体&#xff0c;而公共互联网不是为了实时通信设计的。 视频通讯过程是视频和音频的实时双向完整通讯过程。在…

java学习day62(乐友商城)商品规格设计与商品查询的页面实现

1.商品规格数据结构 乐优商城是一个全品类的电商网站&#xff0c;因此商品的种类繁多&#xff0c;每一件商品&#xff0c;其属性又有差别。为了更准确描述商品及细分差别&#xff0c;抽象出两个概念&#xff1a;SPU和SKU&#xff0c;了解一下&#xff1a; 1.1.SPU和SKU SPU&…

恒温恒湿实验室(房)建设、设计SICOLAB

通用实验室是指适用于多学科的以实验台规模进行经常性科学研究和实验工作的实验室&#xff0c;其夏季空气调节室内计算参数为温度 26&#xff5e;28℃&#xff0c;相对湿度小于 65%&#xff0c;在规范中没有对温湿度控制精度及洁净度做相关要求。专用实验室是指有特定环境要求&…

C++基础学习三

目录儿六、分支语句和逻辑操作符6.1 if语句6.1.1 if6.1.2 if-else6.1.3 if-else if-else6.2 逻辑表达式6.2.1 逻辑或||6.2.2 逻辑与&&6.2.3 逻辑非!6.2.4 逻辑操作符的其他表示方式6.3 字符函数库cctype6.4 三目/元操作符6.5 switch语句6.5.1 switch引入枚举常量6.6 br…

【OpenCall】ICASSP2023通用会议理解及生成挑战赛邀请函

ICASSP2023 通用会议理解及生成挑战赛(General Meeting Understanding and Generation Challenge,缩写为 MUG)是ICASSP2023 系列大挑战(SPGC)之一&#xff0c;由魔搭ModelScope社区、阿里巴巴达摩院语音实验室&语言技术实验室&#xff0c;阿里云天池联合浙江大学数字媒体计…

Linux基本搭建和操作

Linux基本搭建和操作1、创建三台虚拟机2、创建使用SSH远程连接3、实现IP地址与主机名的映射4、关闭和禁用防火墙5、创建目录结构6、压缩打包7、安装软件包安装jdk安装mysql8、创建脚本文件9、运行脚本文件10、免密登录配置11、远程拷贝文件1、创建三台虚拟机 序号虚拟机名称静…

高效技巧-打表法

打表法 打表是一种典型的用空间换时间的技巧 一般指将所有可能需要用到的结果事先计算出来&#xff0c;这样后面需要用到时就可以直接查表获得。 打表常见的用法有如下几种: ①在程序中一次性计算出所有需要用到的结果&#xff0c;之后的查询直接取这些结果这个是最常用到的…

开源之路——如何发布属于自己的npm包

开源之路——如何发布属于自己的npm包1、前言2、起步2.1、初始化项目2.2、安装webpack相关依赖2.3、添加入口文件和封装方法2.4、设置源2.5、添加用户2.6、发布3、使用1、前言 在进行开发的过程当中&#xff0c;难免会出现一些重复性的工作&#xff0c;例如说我们要对一个数组…

电脑如何格式化重装系统

​众所周知&#xff0c;默认情况下&#xff0c;计算机重新安装系统将设置格式化磁盘。如果您选择其他需要格式化的硬盘&#xff0c;您必须如何操作&#xff1f;一般来说&#xff0c;我们是pe手动格式磁盘可以避免立即格式化硬盘造成的一些问题。让我们谈谈如何格式化硬盘重做系…

【软件测试】测试的天花板?资深测试怎么一路爬的......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测试职业的天花板是…

脑图谱的验证方法

方法 目的 与其他分割比较区域内的同质性 比较不同分割的平均区域内同质性 有约束的几何扰动比较 验证分割区域内部的功能同质性 留一交叉验证 验证相似矩阵的稳定性 剪影宽度silhouette width (SI) 计算簇内和簇外的功能信号相似性差异 骰子系数dice coefficient 衡…

G1D36-import-keras.save_model-code-沐沐的调参课

1、python导入函数 https://zhuanlan.zhihu.com/p/64893308 服了 https://blog.csdn.net/weixin_45195364/article/details/119857246?spm1001.2101.3001.6650.6&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-1198572…

OSCS开源安全周报第22期:NuGet 仓库中被发现 13.5 万个包含钓鱼地址的组件包

本周安全态势综述 OSCS 社区共收录安全漏洞15个&#xff0c;公开漏洞值得关注的是 Jenkins Google Login Plugin 存在开放重定向漏洞&#xff08;CVE-2022-46683&#xff09;&#xff0c;Netty <4.1.86.Final 存在拒绝服务漏洞&#xff08;CVE-2022-41881&#xff09;&…

【数据结构】Java实现顺序表

文章目录线性表顺序表顺序表的模拟实现1、新增元素,默认在数组最后新增2、判定是否包含某个元素3、查找某个元素对应的位置4、获取顺序表长度5、在 pos 位置新增元素6、获取 pos 位置的元素7、给 pos 位置的元素设为 value8、删除第一次出现的关键字key9、清除顺序表线性表 什…