11.Java基础概念-ArrayList

news2024/11/13 11:11:38

欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

Facts speak louder than words!


        ArrayList是Java中的一个类,它实现了List接口,是基于动态数组的数据结构。它可以自动扩展以容纳任意数量的元素,并允许随机访问元素。ArrayList是使用数组实现的,所以它具有数组的优点,如随机访问快速,但也有一些缺点,如插入和删除元素时的性能较差。

以下是ArrayList的一些重要特性和用法:

1.自动扩容:当向ArrayList中添加元素时,如果当前容量不足,它会自动增加容量以容纳新元素。这个过程是通过创建一个更大的数组,并将原始数组中的元素复制到新数组中来实现的。根据下面源代码,可以看出数组的默认长度为10。

/**
 * Default initial capacity.
 */
private static final int DEFAULT_CAPACITY = 10;

private static int calculateCapacity(Object[] elementData, int minCapacity) {
        if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
            return Math.max(DEFAULT_CAPACITY, minCapacity);
        }
        return minCapacity;
}

2.随机访问:ArrayList允许通过索引来访问元素。通过调用get(int index)方法,可以获取指定位置的元素。由于ArrayList是基于数组实现的,所以在访问指定位置的元素时速度很快,时间复杂度为O(1)。

public static void main(String[] args) {
        ArrayList<Integer> = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(1);
        list.add(2);
        //获取1下标的元素
        System.out.println(list.get(1));//2
        //设置0下标的元素为2
        System.out.println(list.set(0, 2));//1
        //判断集合中是否存在元素5
        System.out.println(list.contains(5));//false
        //返回第一个2出现的位置
        System.out.println(list.indexOf(2));//0
        //返回最后一次出现2的位置
        System.out.println(list.lastIndexOf(2));//4

        //截取0~3位置的元素
        List<Integer> sub = list.subList(0,3);
        System.out.println(sub.toString());// [2, 2, 3]
        System.out.println(list.toString());// [2, 2, 3, 1, 2]
    }

3.动态添加和删除元素:ArrayList提供了一系列的方法来添加和删除元素。可以使用add(E element)方法在列表的末尾添加元素,也可以使用add(int index, E element)方法在指定位置插入元素。可以使用remove(int index)方法删除指定位置的元素,也可以使用remove(Object obj)方法删除指定的元素。

public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(2);//尾插2
        System.out.println(list.toString());// [2]
        list.add(0,1);//0下标插入1
        System.out.println(list.toString());// [1, 2]

        //Collection接口的子类
        List<Integer> list2 = new LinkedList<>();
        list2.add(3);
        list2.add(4);

        list.addAll(list2);//将list2集合中的元素尾插到list中
        System.out.println(list.toString());// [1, 2, 3, 4]
        list.addAll(1,list2);//将list2集合中的元素从1下标插入list中
        System.out.println(list.toString());// [1, 3, 4, 2, 3, 4]
    }
public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(2);
        list.add(1);

        //删除下标为0的元素,并返回该元素
        int n = list.remove(0);
        System.out.println(n);// 1
        System.out.println(list.toString());// [2, 3, 2, 1]

        //删除第一个2
        //通过显示装箱,将2数字包装成对应的包装类
        boolean result = list.remove(new Integer(2));
        System.out.println(result);// true
        System.out.println(list.toString());// [3, 2, 1]

        //清空元素
        list.clear();
        System.out.println(list.toString());// []
    }

 

4.遍历元素:可以使用for循环迭代器来遍历ArrayList中的元素。使用for循环时,可以通过调用size()方法来获取列表的大小,然后使用get(int index)方法来获取每个元素。使用迭代器时,可以调用iterator()方法来获取迭代器对象,并使用hasNext()和next()方法来遍历元素。

        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);
        //打印一:for
        for (int i = 0; i < arrayList.size(); i++) {
            System.out.print(arrayList.get(i)+" ");
        }

        //打印二:foreach
        for (Integer x : arrayList) {
            System.out.print(x + " ");
        }
        System.out.println();

        //打印三:迭代器
        //默认是从 0 下标开始打印
        System.out.println("===Iterator===");
        Iterator<Integer> it =  arrayList.iterator();//创建迭代器
        while (it.hasNext()) {
            System.out.print(it.next() +" ");
        }
        System.out.println();
 
        System.out.println("===listIterator倒着打印===");
        //从 指定位置 开始打印     list1.size()
        ListIterator<Integer> it2 =  arrayList.listIterator(arrayList.size());
        while (it2.hasPrevious()) {
            System.out.print(it2.previous() +" ");
        }
        System.out.println();

5.泛型支持:ArrayList是一个泛型类,可以指定存储在其中的元素类型。这可以增加代码的类型安全性,并且在编译时可以更好地检测错误。

6.可以存储任意类型的元素:ArrayList可以存储任何类型的对象,包括基本数据类型的包装类,如Integer和Double。

总结起来,ArrayList是一个可变大小的数组,它提供了高效的随机访问和动态添加/删除元素的功能。使用ArrayList可以方便地操作和管理大量的数据。但是需要注意的是,由于ArrayList是基于数组实现的,所以在频繁插入和删除元素时性能较低,这时应该考虑使用LinkedList等其他数据结构。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥The road is long and the line is coming,让我们一起加油吧!🌙🌙🌙

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

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

相关文章

kubectl的安装使用

1. Windows下载kubectl 2.将kucectl的所在目录添加到PATH环境变量下 3.运行 kubectl version --client 命令来测试kubectl是否正确安装并显示其版本信息。这个命令会显示kubectl客户端的版本信息&#xff0c;如果一切正常&#xff0c;这将确认kubectl已经成功安装在你的Windo…

DC-DC升降压芯片(MC34063A/33063)典型电路与元件参数在线计算

MC34063包含DC/DC变换器所需的主要功能的单片控制电路&#xff0c;多用于升压变换器、降压变换器、反向器的控制核心部分。 MC34063的基本结构及引脚图功能&#xff1a; 1脚&#xff1a;开关管T1集电极引出端&#xff1b; 2脚&#xff1a;开关管T1发射极引出端&#xff1b; …

一次耗时的安全测试

简介 接到一个安全测试任务&#xff0c;数据包使用安全控件进行了加密。通过开发插件&#xff0c;实现明文测试&#xff0c;最终发现了2个越权。 加解密过程分析 访问网站首页&#xff0c;需要先安装一个控件。安装完成后&#xff0c;访问网站发现数据包加密处理。按照以前的…

基于springboot+vue实现的在线商城系统

系统主要功能&#xff1a; &#xff08;1&#xff09;商品管理模块&#xff1a;实现了商品的基本信息录入、图片上传、状态管理等相关功能。 &#xff08;2&#xff09;商品分类模块&#xff1a;实现了分类的增删改查、分类层级管理、商品分类的关联等功能。 &#xff08;3&…

不懂编程的都觉得AI要取代程序员了,程序员自己却在偷着乐?真相是…

最近&#xff0c;AI写代码的新闻满天飞&#xff0c;不懂编程的人都觉得AI要逆天了&#xff0c;程序员马上就要失业了&#xff01;但奇怪的是&#xff0c;程序员群体——这帮最懂代码、最常使用AI编程工具的人&#xff0c;怎么反而觉得AI取代不了他们呢&#xff1f;&#x1f914…

TD综合教程——噪波球和正交线性脉冲(附思路和工程文件)

一、噪波球 整体思路&#xff1a; 渲染三件套&#xff1a;Geometry COMP、Camera COMP、Render TOP 在此基础上进行pbr MAT材质和environment COMP环境光渲染 使sphere TOP&#xff08;球体&#xff09;更加柔和&#xff0c;将类型改为NURBS Twist TOP&#xff08;扭曲&#x…

C++---内存管理

1 C/C内存分布 栈区&#xff1a;由编译器自动分配和释放&#xff0c;存放运行时候的局部变量&#xff0c;函数参数&#xff0c;返回数据&#xff0c;返回地址。 堆区&#xff1a;一般由程序员自己分配&#xff0c;然后自己释放&#xff0c;例如栈的实现malloc开辟的数组空间。…

尝试开发油猴(Tampermonkey)脚本

篡改猴 (Tampermonkey) 是拥有 超过 1000 万用户 的最流行的浏览器扩展之一。 它适用于 Chrome、Microsoft Edge、Safari、Opera Next 和 Firefox。 有些人也会把篡改猴(Tampermonkey)称作油猴(Greasemonkey)&#xff0c;尽管后者只是一款仅适用于 Firefox 浏览器的浏览器扩展…

UE5 Linux编译流程(实战)

文章目录 概述setup.sh2.GenerateProjectFiles.sh3.make其他的 小结 概述 之前写过一篇linux上代码的流程&#xff0c;这一篇&#xff0c;补下编译流程。4.26还是4.27的时候&#xff0c;做过编译&#xff0c;那会刚出来&#xff0c;当时编译用的是QT&#xff0c;跟着文档&…

传输大咖40 | 医药行业跨国文件传输的挑战与解决方案

在当今全球化浪潮的推动下&#xff0c;医药健康领域的国际合作变得越发密切。无论是共享临床试验的数据&#xff0c;还是协作推进新药的研发&#xff0c;一个高效的文件传输系统都显得尤为关键&#xff0c;它直接关系到整个行业的快速进步。但是&#xff0c;当文件跨越国界进行…

Redis缓存击穿、缓存穿透、缓存雪崩场景描述及解决方案

Redis缓存击穿、缓存穿透、缓存雪崩场景描述及解决方案 缓存穿透 用户请求了很多既不存在于redis也不存在于数据库的无效数据请求&#xff0c;导致redis无法拦截&#xff0c;最终所有请求都落在数据库中 解决方案&#xff1a;缓存空对象&#xff08;会导致redis中存了很多垃…

The Magic Loop-快速职业发展的框架

前言 在 B2B 系列中短暂休息一下&#xff0c;我很高兴为你带来 Ethan Evans 的重要客座文章。在 Amazon 的 15 年里&#xff0c;Ethan 帮助发明了 Prime Video、Amazon Video、Amazon Appstore、Prime Gaming&#xff08;以前称为 Twitch Prime&#xff09;和 Twitch Commerce…

电阻器件选型

电阻参数 一般都是&#xff08;前面数字x10^末尾数字&#xff09;&#xff0c;如下面的例子 大概清楚电阻的结构即可&#xff0c;无需掌握 电阻器安装在陶瓷基板的上面&#xff1b;在每一端都有内部金属电极&#xff0c;使其与厚膜电阻体接触&#xff1b;电阻原件的成分是金…

第144天:内网安全-Linux权限维持OpenSSHPAM后门SSH软链接公私钥登录

目录 案例一&#xff1a; 权限维持-Linux-替换版本-OpenSSH 后门 案例二&#xff1a; 权限维持-Linux-更改验证-SSH-PAM 后门 案例三&#xff1a; 权限维持-Linux-登录方式-软链接&公私钥&新帐号 ssh软链接 公私钥 新帐号 案例一&#xff1a; 权限维持-Linux-替换…

一. Unity实现虚拟摇杆及屏幕自适应功能

手游里面很多类型的游戏都需要用到遥感功能&#xff0c;例如王者荣耀&#xff0c;和平精英等&#xff0c;之前的摇杆功能都是用类似于Easy Touch的插件进行开发的&#xff0c;今天不借助任何插件来实现虚拟摇杆的功能。 一般虚拟摇杆的组成都是由轮盘和遥感的点组成&#xff0c…

二百六十二、Java——打开别人项目时缺少maven配置,无法运行文件

一、目的 在打开别人的项目时&#xff0c;发现Java文件类型显示出错&#xff0c;没有application&#xff0c;无法运行文件 二、报错原因 项目缺少maven配置 三、解决措施 File——Setting——Maven 修改Maven的配置&#xff0c;指向Maven路径 四、重启项目 文件恢复正常…

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(wa…

跨境外贸业务使用新加坡裸机云站群服务器优势

在全球化的今天&#xff0c;跨境外贸业务正变得越来越普遍。随着互联网技术的发展&#xff0c;越来越多的企业选择使用云计算服务来支持其国际业务。新加坡作为一个国际金融中心和亚洲的数据枢纽&#xff0c;提供了优质的网络基础设施&#xff0c;使其成为设置裸机云站群服务器…

【vue3|第28期】 Vue3 + Vue Router:探索路由重定向的使用与作用

日期&#xff1a;2024年9月8日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉在这里插入代码片得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对…

第18届世界杰出华人奖得主王傲山:承父业展关怀,体现“圆桌”精神

王傲山博士是“保二代”&#xff0c;由父亲言传身教及自孩提时代刻在骨子里的氛围&#xff0c;让他理所当然地传承父亲保险助人为乐的精神。在保险行业打滚两旬余&#xff0c;他成就多项傲人的成绩、取得个人成就的同时&#xff0c;以更高的指标作为团队精神&#xff0c;秉持追…