Java基础语法---集合---ArrayList

news2024/10/5 3:11:34

ArrayList是什么

ArrayList可以看作是一个动态数组,提供了自动扩容的能力,意味着它能够根据需要自动调整其大小以容纳更多的元素,而无需预先指定数组的容量。


使用ArrayList需要加入包

import java.util.ArryList

ArrayList与普通数组的不同

一 、大小容量

普通数组:长度在创建时就必须确定,并且之后不能更改。
ArrayList:是动态数组的实现,其大小可以根据需要自动调整。

二 、类型存储

普通数组:可以直接存储基本类型(如int、double)和对象(如String、Object)。
ArrayList:由于ArrayList是基于Object数组实现的,因此它只能直接存储对象。
如果你要存储基本类型,需要使用它们的包装类来进行自动装箱和拆箱,这可能会影响性能。

Java的包装类包括:
Byte 对应 byte
Short 对应 short
Integer 对应 int
Long 对应 long
Float 对应 float
Double 对应 double
Character 对应 char
Boolean 对应 boolean

三 、API丰富性

普通数组:提供的功能较为基础,主要是通过索引来访问和修改元素。
ArrayList:提供了许多便利的方法

四 、内存使用和性能

普通数组:由于长度固定,没有额外的管理开销,且直接存储基本类型可以节省内存空间,因此在已知大小且不需要动态调整时,性能通常优于ArrayList。
ArrayList:动态扩容机制虽然提供了灵活性,但在扩容过程中涉及数组复制,可能会导致性能下降,尤其是在频繁插入和删除操作时。
存储对象类型和自动装箱/拆箱操作也会带来额外的内存和性能开销。

五 、遍历方式

普通数组:遍历通常通过for循环和索引进行。
ArrayList:传统的索引遍历外,还可以使用迭代器(Iterator)或列表迭代器(ListIterator)进行更灵活的遍历,支持foreach循环。

ArrayList的使用方法

构造方法

空构造

public ArrayList()

默认构造一个初始容量为 10 的空列表。

构造指定的容量

public ArrayList(int initialCapacity)

构造具有指定初始容量的空列表
在这里插入图片描述

构造将一个集合拷贝进去

public ArrayList(Collection<? extends E> c)

增加与减小元素

增加元素

使用add();
在这里插入图片描述
add(E element):可以添加一个元素在尾部
add(int index, E element):在某个索引添加元素
addAll(Collection<? extends E> c): 在列表末尾添加另一个集合的所有元素。
addAll(int index, Collection<? extends E> c): 从指定位置开始,插入另一个集合的所有元素。

addLast(E element);在尾部添加元素
addFirst(E element);在首部添加元素

减少元素

在这里插入图片描述
remove(Object o)
删除第一次遇到的o对象
remove(int index)
删除索引的元素
removeLast()
删去最后一个元素
removeFirst()
删去第一个元素
removeAll(Collection<?> c)
从当前列表中移除出现在指定集合c中的所有元素。这个方法会比较两个集合中的元素,并移除所有在当前列表中也存在于指定集合中的元素
removeIf(Predicate<? super E> filter)
根据提供的谓词(Predicate)来过滤并移除满足条件的元素。
在这里插入图片描述

访问与修改元素

访问元素

使用get(a);访问a位置的元素
使用getFirst();访问第一个元素
使用getLast();访问最后一个元素

import java.util.ArrayList;
public class Main{
    public static void main(String[] args)
    {
        ArrayList<String> a = new ArrayList<>();
        a.add("A");
        a.add("B");
        a.add("C");
        a.add("D");
        a.add("E");
        System.out.println(a.get(2));       //C
        System.out.println(a.getFirst());   //A
        System.out.println(a.getLast());    //F
    }
}

修改元素

set(int index,E a)
改变索引位置的元素
在这里插入图片描述

查找元素

contains()
查找是否有该元素,有就返回ture如果没有false
在这里插入图片描述
indexOf()
找到了就返回第一个索引,没有就返回-1
lastindexOf()
找最后一个出现的索引,没找到就返回-1

在这里插入图片描述

容器操作

size()
返回容器的大小
在这里插入图片描述

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

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

相关文章

【C++】─篇文章带你熟练掌握 map 与 set 的使用

目录 一、关联式容器二、键值对三、pair3.1 pair的常用接口说明3.1.1 [无参构造函数](https://legacy.cplusplus.com/reference/utility/pair/pair/)3.1.2 [有参构造函数 / 拷贝构造函数](https://legacy.cplusplus.com/reference/utility/pair/pair/)3.1.3 [有参构造函数](htt…

bootstrap5-学习笔记1-容器+布局+按钮+工具

参考&#xff1a; Bootstrap5 教程 | 菜鸟教程 https://www.runoob.com/bootstrap5/bootstrap5-tutorial.html Spacing Bootstrap v5 中文文档 v5.3 | Bootstrap 中文网 https://v5.bootcss.com/docs/utilities/spacing/ 之前用bootstrap2和3比较多&#xff0c;最近用到了5&a…

【FAS】《Liveness Detection on Face Anti-spoofing》

文章目录 原文总结与评价CNN-RNN vs 三维卷积作者的方法 原文 [1]欧阳文汉.反人脸图像欺诈的活体识别方法研究[D].浙江大学,2020.DOI:10.27461/d.cnki.gzjdx.2020.002675. 总结与评价 时序运动信息与传统的空间纹理信息相结合 基于相位平移的运动放大算法不错 视觉大小细胞…

每日一题《leetcode--LCR 029.循环有序列表的插入》

https://leetcode.cn/problems/4ueAj6/ 这道题整体上想插入数据有三种情况&#xff1a; 1、整个列表是空列表&#xff0c;需要返回插入的结点 2、整个列表只有一个结点&#xff0c;需要在头结点后插入新结点&#xff0c;随机把新结点的next指向头结点 3、整个列表的结点 >1 …

关于飞速(FS)800G光模块的技术问答

随着云计算、物联网&#xff08;IoT&#xff09;和大数据等技术的快速发展&#xff0c;对网络带宽和传输速率的需求越来越大。飞速&#xff08;FS&#xff09;800G光模块的引入旨在满足对高速数据传输的需求&#xff0c;该光模块采用先进的调制解调技术和高密度光电子元件&…

STM32F103VE和STM32F407VE的引脚布局

STM32F103VE vs STM32F407VE 引脚对比表 引脚 STM32F103VE STM32F407VE 备注 1 VSS VSS 地 2 VDD VDD 电源 3 VSSA VSSA 模拟地 4 VDDA VDDA 模拟电源 5 OSC_IN OSC_IN 外部时钟输入 6 OSC_OUT OSC_OUT 外部时钟输出 7 NRST NRST 复位 8 PC13 (GPIO) PC13 (GPIO) GPIO 9 PC14 (…

鸿蒙全栈开发-一文读懂鸿蒙同模块不同模块下的UIAbility跳转详解

前言 根据第三方机构Counterpoint数据&#xff0c;截至2023年三季度末&#xff0c;HarmonyOS在中国智能手机操作系统的市场份额已经提升至13%。短短四年的时间&#xff0c;HarmonyOS就成长为仅次于安卓、苹果iOS的全球第三大操作系统。 因此&#xff0c;对于鸿蒙生态建设而言&a…

依赖注入方式和自动加载原理

依赖注入 Spring提供了依赖注入的功能&#xff0c;方便我们管理和使用各种Bean&#xff0c;常见的方式有&#xff1a; 字段注入&#xff08;Autowired 或 Resource&#xff09;构造函数注入set方法注入 在以往代码中&#xff0c;我们经常利用Spring提供的Autowired注解来实现…

C语言操作UTF-8编码和GBK编码的文件的示例

一、基本介绍 在C语言中&#xff0c;处理文件编码&#xff08;如UTF-8或GBK&#xff09;时&#xff0c;需要注意C标准库中的文件操作函数&#xff08;如fopen, fread, fwrite, fclose等&#xff09;并不直接支持Unicode或特定字符集的编码。这些函数通常处理字节流&#xff0c…

FreeRTOS基础(十一):消息队列

本文将详细全方位的讲解FreeRTOS的消息队列&#xff0c;其实在FreeRTOS中消息队列的重要性也不言而喻&#xff0c;与FreeRTOS任务调度同等重要&#xff0c;因为后面的各种信号量基本都是基于消息队列的。 目录 一、消息队列的简介 1.1 产生的原因 1.2 消息队列的解决办法 …

防病毒克星——白名单可信系统

白名单作为一种网络安全措施&#xff0c;其核心概念在于限制用户只能访问网络所有者定义的受信任内容。这种机制在保护系统免受恶意软件、病毒等攻击方面发挥着重要作用。然而&#xff0c;关于白名单是否可以防病毒的问题&#xff0c;实际上涉及了多个方面的考虑。 首先&#x…

B=2W,奈奎斯特极限定理详解

一直没搞明白奈奎斯特极限定理的含义&#xff0c;网上搜了很久也没得到答案。最近深思几天后&#xff0c;终于有了点心得。顺便吐槽一下&#xff0c;csdn的提问栏目&#xff0c;有很多人用chatgpt秒回这个事&#xff0c;实在是解决不了问题&#xff0c;有时候人的问题大多数都是…

台式机安装Windows 11和Ubuntu 22双系统引导问题

一、基本情况 1.1、硬件情况 电脑有2个NVMe固态硬盘&#xff0c;1个SATA固态硬盘&#xff0c;1个机械硬盘。其中一个NVMe固态硬盘是Windows系统盘&#xff0c;另一个NVMe固态为Windows软件和文件盘&#xff0c;SATA固态硬盘为Ubuntu专用&#xff0c;机械硬盘为数据备份盘。 …

Java | Leetcode Java题解之第136题只出现一次的数字

题目&#xff1a; 题解&#xff1a; class Solution {public int singleNumber(int[] nums) {int single 0;for (int num : nums) {single ^ num;}return single;} }

Ubuntu下安装和配置Redis

目录 1、更新软件包 2、安装Redis 3、启动 Redis临时服务 4、测试Redis服务 5、配置redis服务 6、Redis服务控制命令 1、更新软件包 执行sudo apt-get update更新软件包 sudo apt-get update2、安装Redis 执行sudo apt-get install redis-server 安装命令 sudo apt i…

CLion配置

下载环境&#xff1a;MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net 解压后找一个位置存放&#xff0c;一般放在和ide同一目录&#xff0c;方便查找 个人习惯配置调整&#xff1a; 项目创建 修改ide解码形式 项目右下角一般默认是utf8 文件编码改…

【C++题解】1074 - 小青蛙回来了

问题&#xff1a;1074 - 小青蛙回来了 类型&#xff1a;需要找规律的循环 题目描述&#xff1a; 关于小青蛙爬井的故事&#xff0c;你应该早就听过了&#xff1a;井深10 尺&#xff0c;小青蛙从井底向上爬&#xff0c;每个白天向上爬 3 尺&#xff0c;每个晚上又滑下来 2 尺&…

kafka安装流程

安装kafka前需要安装zookeeper zookeeper安装教程 1.新建一个logs文件夹 2.修改配置文件 3.修改listeners参数 4.以管理员身份启动kafka服务 .\bin\windows\kafka-server-start.bat .\config\server.properties 如果报 输入行太长。 命令语法不正确。 解决方案如下&#x…

全流程透明双语大语言模型MAP-Neo,4.5T 高质量数据训练

前言 近年来&#xff0c;大语言模型 (LLM) 已经成为人工智能领域最热门的研究方向之一&#xff0c;并在各种任务中展现出前所未有的性能。然而&#xff0c;由于商业利益的驱动&#xff0c;许多最具竞争力的模型&#xff0c;例如 GPT、Gemini 和 Claude&#xff0c;其训练细节和…

codeforces round 949 div2

A Turtle and Piggy Are Playing a Game 题目&#xff1a; 思路&#xff1a;输出2的幂次b使得2^b为最大的不超过x的数 代码&#xff1a; #include <iostream>using namespace std;const int N 2e5 10;void solve() {int l, r;cin >> l >> r;if(r % 2) …