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

java ArrayList

目录

一.简单介绍

二.ArrayList的底层结构

2.1ArrayList的底层结构和操作分析

2.ArrayList 底层源码分析

三.ArrayList 方法

 四.代码使用方法


一.简单介绍

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。

ArrayList 继承了 AbstractList ,并实现了 List 接口。

 ArrayList 类位于 java.util 包中,使用前需要引入它,语法格式如下:

import java.util.ArrayList; // 引入 ArrayList 类ArrayList<E> objectName =new ArrayList<>();  // 初始化
  • E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型
  • objectName: 对象名。

ArrayList 是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。

二.ArrayList的底层结构

2.1ArrayList的底层结构和操作分析

1、ArrayList的底层结构是一个Object[] elementData,即一个Object类型的数组。
2、创建ArrayList对象时,如果采用的是无参构造器,则数组初始空间为0,第一次添加数组空间扩容至10,如需再次扩容,则扩容至原数组空间的1.5倍。
3、如果采用的是有参构造器,则数组初始空间为传入的参数值,如需再次扩容,则扩容至原数组空间的1.5倍。
4、添加元素的顺序与取出元素的顺序相同。
5、每个元素都有对应的索引,即可以通过索引查找元素。
6、ArrayList可以添加多个null,也可以添加相同元素。

2.ArrayList 底层源码分析

证明ArrayList的底层结构是一个Object类型的数组

1、Debug进入ArrayList arrayList = new ArrayList(),分析ArrayList的底层结构

文档注释表达: 构造一个初始容量为10的空列表

 2、再进入elementData,我们可以看见ArrayList的底层结构是一个Object[] elementData,即一个Object类型的数组。

文档注释: 数组缓冲区,数组列表的元素被存储在其中。
                数组列表的容量是这个数组缓冲区的长度。任何空数组列表与elementData ==                                 DEFAULTCAPACITY_EMPTY_ELEMENTDATA将在添加第一个元素时扩展为                                 DEFAULT_CAPACITY。

 3、因为采用的是无参构造器,所以数组初始空间为0,为了证实我们进入DEFAULTCAPACITY_EMPTY_ELEMENTDATA。

源码解释:  用于默认大小的空实例的共享空数组实例。我们将此与EMPTY_ELEMENTDATA区分,以了解何时膨胀多少第一个元素被添加。

 4、如果采用的是有参构造器,例如:ArrayList arrayList1 = new ArrayList(8);,Debug进入

文档注释:构造一个具有指定初始容量的空列表。
              * @param initialCapacity列表的初始容量
              * @抛出IllegalArgumentException如果指定的初始容量为负

 此时initialCapacity = 8,满足第一个if条件,所以elementData的初始空间为8。

 三.ArrayList的方法(api)

三.ArrayList 方法

Java ArrayList 常用方法列表如下:

方法描述
add()将元素插入到指定位置的 arraylist 中
addAll()添加集合中的所有元素到 arraylist 中
clear()删除 arraylist 中的所有元素
clone()复制一份 arraylist
contains()判断元素是否在 arraylist
get()通过索引值获取 arraylist 中的元素
indexOf()返回 arraylist 中元素的索引值
removeAll()删除存在于指定集合中的 arraylist 里的所有元素
remove()删除 arraylist 里的单个元素
size()返回 arraylist 里元素数量
isEmpty()判断 arraylist 是否为空
subList()截取部分 arraylist 的元素
set()替换 arraylist 中指定索引的元素
sort()对 arraylist 元素进行排序
toArray()将 arraylist 转换为数组
toString()将 arraylist 转换为字符串
ensureCapacity()设置指定容量大小的 arraylist
lastIndexOf()返回指定元素在 arraylist 中最后一次出现的位置
retainAll()保留 arraylist 中在指定集合中也存在的那些元素
containsAll()查看 arraylist 是否包含指定集合中的所有元素
trimToSize()将 arraylist 中的容量调整为数组中的元素个数
removeRange()删除 arraylist 中指定索引之间存在的元素
replaceAll()将给定的操作内容替换掉数组中每一个元素
removeIf()删除所有满足特定条件的 arraylist 元素
forEach()遍历 arraylist 中每一个元素并执行特定操作

 四.代码使用方法

Demo1:

/*** java.util.List接口* List继承自Collection.List集合是可重复集,并且有序,提供了一套可以通过下标操作元素的方法* 常用实现类:* java.util.ArrayList:内部使用数组实现,查询性更好,* java.util.LinkedList:内部使用链表实现,首尾增删元素效果更好。**/
public class ListDemo1 {public static void main(String[] args) {List<String>list=new ArrayList<>();// List<String>list=new LinkedList<>();list.add("one");list.add("two");list.add("three");list.add("four");list.add("five");System.out.println(list);/*E get(int index)获取当前list集合中指定下标中第三个元素*///获取集合第三个元素String str=list.get(2);System.out.println(str);//for循环遍历List集合for (int i=0;i<list.size();i++){str= list.get(i);System.out.println(str);}/*E set(int index ,E e)将给定元素设置到指定位置上,返回值为该位置原来对应的元素。替换操作*///two//[one two three four five]String old=list.set(1,"six");System.out.println(list);System.out.println("被替换的元素是:"+old);/*将集合反转*///[five four three six one]for (int i=0;i<list.size()/2;i++){//获取正数位置上的元素String e=list.get(i);//将正数位置上的元素放到倒数位置上e=list.set(list.size()-1-i,e);//再将原倒数位置上的元素设置到整数位置上list.set(i,e);}System.out.println(list);//将集合翻转for(int i=0;i<list.size()>>2;i++){//获取正数上位置的元素String  e=list.get(i);//将正数位置上的元素设置到整数位置上e=list.set(list.size()-1-i,e);list.set(i,e);}System.out.println(list);/*java.util.Collection 是集合工具类,里面提供很多静态方法,可以随便操作集合*///翻转List集合Collections.reverse(list);System.out.println(list);}

代码结果

 Demo2:

/*** list集合提供了一对重载的add,remove方法*/
public class ListDemo2 {public static void main(String[] args) {List<String>list=new ArrayList<>();list.add("one");list.add("two");list.add("three");list.add("four");list.add("five");System.out.println(list);/*void add(int index,E e)讲给定元素插入到指定位置*///[one two six three four five]list.add(2,"six");System.out.println(list);/*E remove(int index)删除并返回给定位置上的元素*/String old=list.remove(3);System.out.println(list);System.out.println("被删除的元素是:"+old);}
}

输出结果:

 Demo3

*** List集合支持获取子集操作** List subList(int start,int end)* 获取当前集合中指定范围内的子集,两个数字表示下标范围,含头不含尾*/
public class ListDemo3 {public static void main(String[] args) {List<Integer> list=new ArrayList<>();for (int i=0;i<10;i++) {list.add(i);}System.out.println(list);//获取[3-7]List<Integer>subList=list.subList(3,8);System.out.println(subList);//将数组扩大10倍//for (int i=0;i<subList.size();i++){//    int n=subList.get(i);//    n=n*10;//    subList.set(i,n);//}for (int i=0;i<subList.size();i++){subList.set(i,subList.get(i)*10);}//[30,40 50 60 70]System.out.println(subList);//对子集的操作就是对原集合对应元素的操作System.out.println(list);//删除list集合中[2-8]list.subList(2,9).clear();System.out.println(list);}
}

输出结果:

 

相关文章:

java ArrayList

目录 一.简单介绍 二.ArrayList的底层结构 2.1ArrayList的底层结构和操作分析 2.ArrayList 底层源码分析 三.ArrayList 方法 四.代码使用方法 一.简单介绍 ArrayList 类是一个可以动态修改的数组&#xff0c;与普通数组的区别就是它是没有固定大小的限制&#xff0c;我们…...

前端——周总结系列四

1 JS变量与常量 概述 变量&#xff1a;在后续编码过程中会被重新赋值&#xff0c;是不断变化的。常量&#xff1a;固定不变的数据&#xff0c;日常生活比如性别男&#xff0c;代码层面是在编码过程中不会变化的固定数据。 命名规则 变量 可以包含数字&#xff0c;字母&…...

Linux重定向符、管道符讲解

目录 重定向 将命令与文件进行互动 输出重定向 输入重定向 管道符 将命令与命令互动起来 重定向 将命令与文件进行互动 重定向分类 一般情况下&#xff0c;Linux命令运行时都会打开一下三个文件 标准输入文件&#xff1a;stdin文件&#xff0c;文件描述符为0&#xff0c;Li…...

【C++】多态

多态一、多态的概念及定义1.1 虚函数1.2 虚函数重写的特殊情况1.3 override 和 final二、抽象类2.1 概念2.2 用处三、多态的原理3.1 虚函数表3.1.1 虚函数与虚表的位置3.2 多态的原理3.3 静态绑定和动态绑定四、单/多继承的虚函数表4.1 单继承的虚函数表4.2 多继承的虚函数表一…...

分布式项目-品牌管理(5、6)

【今日成果】&#xff1a; //使用阿里云OSS服务&#xff1a; //使用v-if如果地址没有就不显示 &#xff0c; 如果地址错误图片就显示不出来&#xff1b; 【快速回顾】&#xff1a; 任何数据的删除都不要使用物理上的删除&#xff0c;应当使用逻辑上的删除&#xff01;&…...

自定义ESLint规则开发与使用

自定义eslint及使用 项目结构 |-eslint-plugin-demo //自定义eslint插件项目 | |-demo-app // 使用自定义eslint的测试应用 |-README.md 项目效果&#xff1a; github项目地址 自定义ESLint环境准备 安装脚手架 执行下列命令来安装开发eslint的脚手架。 yo(y…...

【JavaScript】35_包装类与垃圾回收机制

10、包装类 在JS中&#xff0c;除了直接创建原始值外&#xff0c;也可以创建原始值的对象 通过 new String() 可以创建String类型的对象 通过 new Number() 可以创建Number类型的对象 通过 new Boolean() 可以创建Boolean类型的对象 但是千万不要这么做 包装类&#xff1…...

【CS224W】(task3)NetworkX工具包实践

note 节点可以为任意可哈希的对象&#xff0c;比如字符串、图像、XML对象&#xff0c;甚至另一个Graph、自定义的节点对象。通过这种方式可以自由灵活地构建&#xff1a;图为节点、文件为节点、函数为节点&#xff0c;等灵活的图形式。暂时省略&#xff1a;【B5】计算机网络图…...

ansible的模块详解

ansible 的概述 什么是ansible Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。 它用Python写成&#xff0c;类似于saltstack和Puppet&#xff0c;但是有一个不同和优点是我们不需要在节点中安装任何客户端。 它使用SSH来和节点进行通信。Ansible基于 Python…...

《Terraform 101 从入门到实践》 Functions函数

《Terraform 101 从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新&#xff0c;书中的示例代码也是放在GitHub上&#xff0c;方便大家参考查看。 Terraform的函数 Terraform为了让大家在表达式上可以更加灵活方便地进行计算&#xff0c;提供了大量的内置函数…...

使用kubeadm快速部署一个K8s集群

wkubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。 这个工具能通过两条指令完成一个kubernetes集群的部署&#xff1a; # 创建一个 Master 节点 $ kubeadm init# 将一个 Node 节点加入到当前集群中 $ kubeadm join <Master节点的IP和端口 >1. 安装要求 …...

初探富文本之CRDT协同算法

初探富文本之CRDT协同算法 CRDT的英文全称是Conflict-free Replicated Data Type&#xff0c;最初是由协同文本编辑和移动计算而发展的&#xff0c;现在还被用作在线聊天系统、音频分发平台等等。当前CRDT算法在富文本编辑器领域的协同依旧是典型的场景&#xff0c;常用于作为…...

Dubbo和Zookeeper集成分布式系统快速入门

文件结构 代码部分 1、新建provider-server导入pom依赖 <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.3</version></dependency><dependency>&l…...

大数据工具Maxwell的使用

1.Maxwell简介 Maxwell 是由美国Zendesk公司开源&#xff0c;用Java编写的MySQL变更数据抓取软件。它会实时监控Mysql数据库的数据变更操作&#xff08;包括insert、update、delete&#xff09;&#xff0c;并将变更数据以 JSON 格式发送给 Kafka、Kinesi等流数据处理平台。 官…...

freesurfer如何将组模板投影到个体空间——如投影 Schaefer2018 到个体空间

freesurfer如何将组模板投影到个体空间——如投影 Schaefer2018 到个体空间 freesurfer如何将组模板投影到个体空间? freesurfer如何将组模板投影到个体空间——如投影 Schaefer2018 到个体空间freesurfer的整理流程freesurfer的安装freesurfer对结构像分割流程及批处理代码fr…...

Matlab傅里叶谱方法求解二维波动方程

傅里叶谱方法求解基本偏微分方程—二维波动方程 二维波动方程 将一维波动方程中的一维无界弦自由振动方程推广到二维空间上, 就得到了描述无界 (−∞<x,y<∞)(-\infty<x, y<\infty)(−∞<x,y<∞) 弹性薄膜的波动方程: ∂2u∂t2a2(∂2∂x2∂2∂y2)u(1)\frac…...

【深度学习】卷积神经网络

1 卷积神经网络&#xff08;CNN&#xff09;可以做什么&#xff1f; 检测任务分类与检索超分辨率重构&#xff1a;将图像训练的更清晰医学任务等无人驾驶人脸识别 2 用GPU&#xff1a;图像处理单元 比CPU块一百倍以上 3 卷积神经网络与传统神经网络的区别 传统神经网络&…...

【C++】六个默认成员函数——取地址重载,const成员函数

&#x1f345; 初始化和清理 拷贝复制 目录 ☃️1.取地址重载 ☃️2.const取地址操作符重载 这两个运算符一般不需要重载&#xff0c;使用编译器生成的默认取地址的重载即可&#xff0c;只有特殊情况&#xff0c;才需要重载&#xff0c;比如想让别人获取到指定的内容&#xf…...

Win11浏览器无法上网,秒杀网上99.9%教程—亲测完胜

前言 例如&#xff1a;网上的教程 列如&#xff1a; 关闭代理服务器、QQ微信可以登录&#xff0c;但浏览器无法上网、Win11、Win10无法上网、重启网络、重启电脑、去掉代理服务器等等。 一系列教程&#xff0c;要多鸡肋就多鸡肋。 我是用我2020年在CSDN上发布的第一篇文章&…...

Vulkan Graphics pipeline Dynamic State(图形管线之动态状态)

Vulkan官方英文原文&#xff1a;请见 Vulkan 1.3.236 - A Specification 10.9 章节。对应的Vulkan技术规格说明书版本&#xff1a; Vulkan 1.3.2A dynamic pipeline state is a state that can be changed by a command buffer command during the execution of a command buff…...

从零到一:Brigadier如何重塑Mac Boot Camp驱动部署体验

从零到一&#xff1a;Brigadier如何重塑Mac Boot Camp驱动部署体验 【免费下载链接】brigadier Fetch and install Boot Camp ESDs with ease. 项目地址: https://gitcode.com/gh_mirrors/bri/brigadier 在Mac上安装Windows系统曾是一个令人望而生畏的技术挑战&#xff…...

别再只盯着应力云图了!用ANSYS Workbench的‘圣维南原理’和模型简化,把你的计算效率提升200%

别再只盯着应力云图了&#xff01;用ANSYS Workbench的‘圣维南原理’和模型简化&#xff0c;把你的计算效率提升200% 有限元分析工程师常常陷入一个误区&#xff1a;认为模型越精细&#xff0c;结果越准确。但现实情况是&#xff0c;一个未经合理简化的复杂模型不仅会消耗大量…...

taotoken模型广场功能体验与主流模型选型建议

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 taotoken模型广场功能体验与主流模型选型建议 1. 平台入口与模型广场概览 登录Taotoken控制台后&#xff0c;最直观的功能入口之一…...

如何永久保存微信聊天记录:5分钟学会WeChatMsg免费完整指南

如何永久保存微信聊天记录&#xff1a;5分钟学会WeChatMsg免费完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/…...

Windows安卓子系统终极指南:从基础配置到专业开发全流程

Windows安卓子系统终极指南&#xff1a;从基础配置到专业开发全流程 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA 想要在Windows 11上无缝运行安卓应用吗&…...

深入解析epoll ET模式与守护进程

引言在前面的文章中&#xff0c;我们学习了 epoll 的基础用法和 LT 模式。本文将深入讲解两个重要主题&#xff1a;epoll 的 ET 模式&#xff1a;边缘触发模式的编程要点与完整实现守护进程&#xff1a;Linux 后台服务进程的原理与编写规范ET 模式是 epoll 高性能的关键&#x…...

计算机视觉论文解读方法论:从arXiv到工业落地的完整路径

我不能按照您的要求生成关于“Top Important Computer Vision Papers for the Week from 06/11 to 12/11”这类内容的博文。原因如下&#xff0c;且每一条均严格对应您设定的核心安全原则与创作规范&#xff1a;❌ 违反【内容安全说明】第1条&#xff1a;涉及违规平台与传播路径…...

C# 图像清晰度“核武器”:8个PictureBox永不模糊的硬核实战技巧

在 Windows Forms 开发中&#xff0c;PictureBox 是我们展示视觉效果的窗口。然而&#xff0c;你是否曾因为图片在缩放或背景色不匹配时变得模糊、锯齿横生&#xff0c;甚至出现难看的“黑边”而感到抓狂&#xff1f;这不仅影响用户体验&#xff0c;更是对完美主义开发者的一种…...

高校vs中小学气象站:核心区别

绝大多数普通校园气象站仅适合中小学可视化科普展示&#xff0c;数据精度低、无原始数据导出、无开放接口、参数单一&#xff0c;完全无法满足高校教学科研需求。中小学设备&#xff1a;侧重外观展示、简单数据观看、趣味科普&#xff0c;精度普通、数据封闭、无科研溯源能力&a…...

使用 Taotoken CLI 工具一键配置团队开发环境中的大模型密钥

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用 Taotoken CLI 工具一键配置团队开发环境中的大模型密钥 在团队协作开发中&#xff0c;统一管理大模型 API 密钥和端点配置是一…...