Java数据结构-ArrayList

目录

  • 1. 初识集合框架
  • 2. ArrayList的介绍
  • 3. ArrayList的使用
    • 3.1 构造方法
    • 3.2 add
    • 3.3 addAll
    • 3.4 remove
    • 3.5 get
    • 3.6 set
    • 3.7 contains
    • 3.8 IndexOf
    • 3.9 lastIndexOf
    • 3.10 subList
  • 4. ArrayList的遍历
    • 4.1 简单粗暴法
    • 4.2 循环遍历法
    • 4.3 迭代器

1. 初识集合框架

Java集合框架是Java编程语言提供的一组接口和类,用于存储和操作数据。它提供了各种类型的集合,如列表、集合、映射等,以及用于操作和管理集合的接口和类。

Java集合框架主要包括以下部分:蓝色代表接口,红色代表类,黄色代表抽象类
在这里插入图片描述
前面我们自己实现了一个顺序表:Java数据结构-顺序表,那么我们每次想要使用这个数据结构的时候,都需要自己实现一遍吗?不需要!Java给我们提供了ArrayList这个类,我们使用它就好了!

2. ArrayList的介绍

ArrayList是集合框架中的一个泛型类,可以存储任意的数据,使用可以传递类型,它实现了List接口,ArrayList的本质其实是一个数组。ArrayList使用方法有两种:

	ArrayList<Integer> arr = new ArrayList<>();
	List<Integer> list = new ArrayList<>();

这两个区别在于:List是一个接口,ArrayList是一个类,因为ArrayList实现了List接口,所以List中有的方法arr都可以调用,并且arr还能调用ArrayList独有的方法。所以ArrayList能调用的方法更多

3. ArrayList的使用

下面列举了一些ArrayList的常用方法

3.1 构造方法

ArrayList的构造方法有3个
第一个:不带参数的构造方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看出,调用不带参数的构造方法时,并没有给数组分配内存,数组长度是0

第二个:带一个整型类型参数的构造方法
在这里插入图片描述
initialCapacity表示初始容量,也就是说,我们可以通过参数来指定数组的大小
第三个:
这个参数有点奇怪,它表示:只要是Collection本身或者实现了Collection接口的都能进行传递
在这里插入图片描述
举个例子:
从LinkedList第一张图可以看到,LinkedList是实现了Collection接口的,所以下面代码中list也能作为参数传递给ArrayList,这样可以把list中所有的数据全部添加到arr1中

    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(100);
        ArrayList<Integer> arr1 = new ArrayList<>(list);
        arr1.add(99);
        System.out.println(arr1);
    }

3.2 add

add方法的功能:在顺序表的末尾添加数据
add的原理:如果说,实例化ArrayList,调用不带参数的构造方法时,没有分配内存,数组长度是0,那么add是如何添加的?来看源码:
在这里插入图片描述

总结:调用不带参数的构造方法,第一次add时,会给数组分配大小为10的内存,如果容量不够,会自动扩容1.5倍

3.3 addAll

将指定集合的所有元素插入列表,可以指定插入位置,如果不指定默认是尾插
原型:

public boolean addAll(int index, Collection<? extends E> c);
public boolean addAll(Collection<? extends E> c);

举例:arr1中有1 ,2,3 , 4,arr2有99,将arr1整体插入arr2

    public static void main(String[] args) {
        ArrayList<Integer> arr1 = new ArrayList<>();
        arr1.add(1);
        arr1.add(2);
        arr1.add(3);
        arr1.add(4);
        ArrayList<Integer> arr2 = new ArrayList<>();
        arr2.add(99);
        System.out.println("arr2在addAll之前:");
        System.out.println(arr2);
        arr2.addAll(arr1);
        System.out.println("addAll之后:");
        System.out.println(arr2);
    }

输出结果:
在这里插入图片描述

3.4 remove

删除元素,如果参数为整数,表示删除该下标的值,如果参数为一个对象,表示删除列表中的这个元素
原型:

public E remove(int index);
public boolean remove(Object o);

例:

    public static void main(String[] args) {
        ArrayList<Integer> arr1 = new ArrayList<>();
        arr1.add(1);
        arr1.add(2);
        arr1.add(3);
        arr1.add(4);
        System.out.println("删除前 " + arr1);
        arr1.remove(0);
        System.out.println("删除0下标 " + arr1);
        arr1.remove(Integer.valueOf(3));
        System.out.println("删除3这个元素 " + arr1);
    }

输出结果:
在这里插入图片描述

3.5 get

获取index下标位置的元素
原型:

public E get(int index);

3.6 set

将index下标位置设置为element
原型:

public E set(int index, E element);

例:

    public static void main(String[] args) {
        ArrayList<Integer> arr1 = new ArrayList<>();
        arr1.add(1);
        arr1.add(2);
        arr1.add(3);
        arr1.add(4);
        System.out.println("set前" + arr1);
        arr1.set(0, 99);
        System.out.println("set后" + arr1);
    }

输出结果:
在这里插入图片描述

3.7 contains

判断列表中是否包含某个元素,如果包含返回true,否则返回false
例:

    public static void main(String[] args) {
        ArrayList<Integer> arr1 = new ArrayList<>();
        arr1.add(1);
        arr1.add(2);
        arr1.add(3);
        arr1.add(4);
        System.out.println(arr1.contains(1));
        System.out.println(arr1.contains(99));
    }

输出结果:
在这里插入图片描述

3.8 IndexOf

获取第一次出现的o的下标,如果不包含o返回-1

public int indexOf(Object o);

例:

    public static void main(String[] args) {
        ArrayList<Integer> arr1 = new ArrayList<>();
        arr1.add(1);
        arr1.add(2);
        arr1.add(3);
        arr1.add(4);
        System.out.println(arr1.indexOf(3));
        System.out.println(arr1.indexOf(99));
    }

输出结果:
在这里插入图片描述

3.9 lastIndexOf

原型:

public int lastIndexOf(Object o);

返回最后一次出现的o的下标
例:

    public static void main(String[] args) {
        ArrayList<Integer> arr1 = new ArrayList<>();
        arr1.add(1);
        arr1.add(2);
        arr1.add(1);
        arr1.add(4);
        System.out.println(arr1.lastIndexOf(1));
    }

输出结果:
在这里插入图片描述

3.10 subList

public List<E> subList(int fromIndex, int toIndex);

截取部分List,从fromIndex下标截取到toIndex(不包括toIndex),截取的结果不是生成新的列表,而是保存fromIndex的位置,所以修改截取部分的内容的同时也会修改原来的列表
例如:

    public static void main(String[] args) {
        ArrayList<Integer> arr1 = new ArrayList<>();
        arr1.add(1);
        arr1.add(2);
        arr1.add(1);
        arr1.add(4);
        List<Integer> list = arr1.subList(1, 3);
        System.out.println("截取后的list" + list);
        System.out.println("修改前" + list);
        list.set(0, 99);
        System.out.println("修改前" + list);
    }

输出结果:
在这里插入图片描述

4. ArrayList的遍历

4.1 简单粗暴法

直接使用System.out.println输出,因为重写了toString方法,所以会按一定的格式输出所有元素
例:

    public static void main(String[] args) {
        ArrayList<Integer> arr = new ArrayList<>();
        arr.add(1);
        arr.add(2);
        arr.add(3);
        arr.add(4);
        System.out.println(arr);
    }

输出结果:
在这里插入图片描述

4.2 循环遍历法

使用for循环遍历或者for each
例:
for循环:

    public static void main(String[] args) {
        ArrayList<Integer> arr = new ArrayList<>();
        arr.add(1);
        arr.add(2);
        arr.add(3);
        arr.add(4);
        for (int i = 0; i < arr.size(); i++) {
            System.out.print(arr.get(i) + " ");
        }
    }

输出结果:
在这里插入图片描述
for each

    public static void main(String[] args) {
        ArrayList<Integer> arr = new ArrayList<>();
        arr.add(1);
        arr.add(2);
        arr.add(3);
        arr.add(4);
        //冒号左边也可以是基本数据类型(会自动拆箱)
        for (Integer x : arr) {
            System.out.print(x + " ");
        }
    }

输出结果:
在这里插入图片描述

4.3 迭代器

使用Iterator:

    public static void main(String[] args) {
        ArrayList<Integer> arr = new ArrayList<>();
        arr.add(1);
        arr.add(2);
        arr.add(3);
        arr.add(4);
        //迭代器Iterator
        Iterator<Integer> it = arr.iterator();
        while (it.hasNext()) {
            System.out.print(it.next() + " ");
        }
    }

输出结果:
在这里插入图片描述
使用ListIterator

    public static void main(String[] args) {
        ArrayList<Integer> arr = new ArrayList<>();
        arr.add(1);
        arr.add(2);
        arr.add(3);
        arr.add(4);
        //ListIterator:List专属迭代器 顺序遍历
        ListIterator<Integer> it = arr.listIterator();
        while (it.hasNext()) {
            System.out.print(it.next() + " ");
        }
    }

输出结果:
在这里插入图片描述

    public static void main(String[] args) {
        ArrayList<Integer> arr = new ArrayList<>();
        arr.add(1);
        arr.add(2);
        arr.add(3);
        arr.add(4);
        //ListIterator:List专属迭代器)倒序遍历
        ListIterator<Integer> it = arr.listIterator(arr.size());
        while (it.hasPrevious()) {
            System.out.print(it.previous() + " ");
        }
    }

输出结果:
在这里插入图片描述
今天的内容就到这里,感谢老铁们的点赞、收藏、评论~❤

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【前端面试3+1】01闭包、跨域

一、对闭包的理解 定义&#xff1a; 闭包是指在一个函数内部定义的函数&#xff0c;并且该内部函数可以访问外部函数的变量。闭包使得函数内部的变量在函数执行完后仍然可以被访问和操作。 特点&#xff1a; 闭包可以访问外部函数的变量&#xff0c;即使外部函数已经执行完毕。…

抖音视频关键词无水印下载软件|手机网页视频批量提取工具

全新视频关键词无水印下载软件&#xff0c;助您快速获取所需视频&#xff01; 随着时代的发展&#xff0c;视频内容已成为人们获取信息和娱乐的重要途径。为了方便用户获取所需视频&#xff0c;推出了一款功能强大的视频关键词无水印下载软件。该软件主要功能包括关键词批量提取…

【经验分享||快速解决】VScode+Python配置Selenium环境配置问题。ERROR: Cannot uninstall ‘certifi‘.

目录 正常安装遇到的问题 当在控制台输入pip install selenium时候&#xff0c;遇到的问题如下&#xff1a; 主要爆红的问题为 解决办法和正确安装方法 降低selenium的版本即可 在vscode控制台输入上面的代码即可。 总结 正常安装遇到的问题 当在控制台输入pip instal…

基于nodejs+vue发艺美发店管理系统python-flask-django-php

系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对发艺美发店管理的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的…

文件编辑命令—vim

1.vim vim 是vi的升级版本.vi 文件名(vi方向键用不了) vim 的官方网站 (welcome home : vim online) 自己也说 vim 是一个程序开发工具而不是文字处理软件。 2.安装vim sudo apt install vim 如果出错了:apt update:刷新软件源; 出现"无法获得锁 之类的"sudo rm 文件…

8.软件工程

整个章节偏向于记忆、背诵&#xff1b; 主要议题&#xff1a; 软件体系&#xff1a;3层&#xff1b; UML重点&#xff0c;重点记3要素中的关系、图&#xff1b; 1.软件体系结构 分层 优点&#xff1a;利于软件的重复利用&#xff1b; 缺点&#xff1a;以什么方式分层&#…

小迪安全47WEB 攻防-通用漏洞Java 反序列化EXP 生成数据提取组件安全

#知识点&#xff1a; 1、Java 反序列化演示-原生 API 接口 2、Java 反序列化漏洞利用-Ysoserial 使用 3、Java 反序列化漏洞发现利用点-函数&数据 4、Java 反序列化考点-真实&CTF 赛题-审计分析 #内容点&#xff1a; 1、明白-Java 反序列化原理 2、判断-J…

Echarts 利用多X轴实现未来15天天气预报

Echarts 利用多X轴实现未来15天天气预报 UI 设计图 Echarts 实现效果 代码实现 代码分解 echarts 图表上下均显示数据 通过设置 grid.top 和 grid.bottom 设置白天和夜间天气展示区域 grid: {top: 36%,bottom: 36%,left: 5%,right: 5%}, 天气图标的设置 由于 axisLabel 的…

SpringBoot学习之ElasticSearch下载安装和启动(Mac版)(三十一)

本篇是接上一篇Windows版本,需要Windows版本的请看上一篇,这里我们继续把Elasticsearch简称为ES,以下都是这样。 一、下载 登录Elasticsearch官网,地址是:Download Elasticsearch | Elastic 进入以后,网页会自动识别系统给你提示Mac版本的下载链接按钮 二、安装 下载…

C++ 简单模拟实现 STL 中的 list 与 queue

目录 一&#xff0c;list 1&#xff0c; list 的节点与迭代器 2&#xff0c;list 的数据结构、一些简单的功能、构造函数 3&#xff0c;list 的对元素操作 4&#xff0c;C 11 的一些功能 5&#xff0c;完整代码&#xff1a; 二&#xff0c;queue 一&#xff0c;list std…

织梦地方php分类信息源码带数据库【附下载】

织梦地方&#xff08;DedeCMS&#xff09;是一款基于PHPMySQL技术的开源内容管理系统&#xff08;CMS&#xff09;。它以其强大的功能、灵活的扩展性和友好的用户界面&#xff0c;成为了众多网站建设者的首选。 在功能方面&#xff0c;织梦地方CMS提供了丰富的模板标签和灵活的…

问卷调查数据分析指南!掌握方法,精准把握用户需求!

“我们可以用自定义报表、交叉报表、自定义过滤器等放方式进行问卷调查数据分析。“ 问卷调查的过程中&#xff0c;问卷设计、问卷分发、问卷收集可能都不是让我们最头疼的。经过几天的奋战&#xff0c;终于拿到了数据&#xff0c;但是问题也随之而来。收集上来的问卷信息&…

word文件如何转PDF格式?word转PDF的方法

在当今数字化时代&#xff0c;文档格式的转换已成为日常生活和工作中不可或缺的一部分。其中&#xff0c;将Word文档转换为PDF格式更是受到了广大用户的青睐。本文将详细介绍Word转PDF的方法&#xff0c;帮助读者轻松实现文档格式的转换&#xff0c;并探讨转换过程中的注意事项…

03-CSS盒模型(padding、margin、opactiy、cursor、display、css3前缀)

一、CSS盒模型 CSS 盒模型规定了处理元素内容、内边距、边框 和 外边距 的方式。最内部分是元素内容&#xff0c;直接包围内容的是内边距。内边距呈现了元素的背景。内边距的边缘是边框。边框以外是外边距。 1.元素的尺寸: height 设置元素的高度。属性值&#xff1a;auto&am…

用BI来做金蝶的数据分析,真能随时自助分析?

BI数据分析快的事&#xff0c;大家都知道&#xff0c;那用BI来分析金蝶ERP上的数据也很快&#xff0c;也能随时想怎么分析就怎么分析&#xff0c;想分析哪些数据就分析哪些数据吗&#xff1f; 用BI分析金蝶数据&#xff0c;不仅可随时自助分析&#xff0c;还可极大提高分析效率…

Nginx 内存池

目录 零、基本框架 一、基础结构 二、对外接口 三、函数实现 1、ngx_create_pool 2、ngx_destroy_pool 3、ngx_reset_pool 4、ngx_palloc 5、ngx_pnalloc 6、ngx_pmemalign 7、ngx_pfree 8、ngx_pcalloc 9、ngx_pool_cleanup_add 10、ngx_pool_run_cleanup_file…

Flask python 开发篇:上传文件(在指定目录下创建文件夹)

flask上传文件以及常见问题 一、flask文档上传文件的介绍二、上传文件的实现2.1、生成一个from表单&#xff0c;用来提交图片2.2、编写上传的逻辑 三、运行代码、以及常见异常四、写在最后 一、flask文档上传文件的介绍 Flask上传文件的文档介绍&#xff0c;文件上传的基本思想…

基于nodejs+vue的nuct产品售后管理系统python-flask-django-php

同时还能为用户提供一个方便实用的nuct产品售后管理系统&#xff0c;使得用户能够及时地找到合适自己的产品。管理员在使用本系统时&#xff0c;可以通过后台管理员界面管理用户的信息&#xff0c;也可以发布产品售后信息&#xff0c;让用户及时了解nuct产品售后信息。这样&…

web前端之3D标签动画、指定范围的随机数、动态设置css变量、文档片段对象、反向动画

MENU 效果图htmlJavaScriptstyle 效果图 html <div class"container"></div>JavaScript // 祝词 var words [健康码常绿,股票飙红,生意兴隆,财源广进,心想事成,永远十八,身体健康,大富大贵,大吉大利,万事如意,美梦成真,吉祥如意,鸿运当头,五福临门,吉…

uniapp的配置文件、入口文件、主组件、页面管理部分

pages.json 配置文件&#xff0c;全局页面路径配置&#xff0c;应用的状态栏、导航条、标题、窗口背景色设置等 main.js 入口文件&#xff0c;主要作用是初始化vue实例、定义全局组件、使用需要的插件如 vuex&#xff0c;注意uniapp无法使用vue-router&#xff0c;路由须在pag…