首页 > 编程语言 >java ArrayList集合

java ArrayList集合

时间:2025-01-13 09:30:11浏览次数:3  
标签:java 删除 int ArrayList 元素 list 索引 集合

ArrayList 是 Java 中最常用的集合类之一,它位于 java.util 包中,属于 List 接口的实现类。ArrayList 基于数组实现,可以动态调整大小,允许存储重复元素,并支持快速的随机访问操作。

集合和数组的优势对比:

  1. 长度可变
  2. 添加数据的时候不需要考虑索引,默认将数据添加到末尾

下面详细介绍 ArrayList 的各个方面。

1. ArrayList 的基本概念

ArrayList 是一个动态数组,其内部通过数组来存储元素。它允许按索引位置访问元素,因此具有高效的随机访问性能。但是,当涉及到插入或删除元素时,尤其是在列表的中间或开始位置时,ArrayList 的性能可能会受到影响,因为需要移动数组中的其他元素。

1.1 ArrayList类概述

  • 什么是集合

    ​ 提供一种存储空间可变的存储模型,存储的数据容量可以发生改变

  • ArrayList集合的特点

    ​ 长度可以变化,只能存储引用数据类型。

  • 泛型的使用

    ​ 用于约束集合中存储元素的数据类型

2. 创建 ArrayList

你可以通过多种方式创建一个 ArrayList。

2.1 创建一个空的 ArrayList:

ArrayList<String> list = new ArrayList<>();

这会创建一个空的 ArrayList,其初始容量是 10(默认值)。当添加的元素超过当前容量时,ArrayList 会自动扩展容量。

2.2 创建一个具有指定初始容量的 ArrayList:

ArrayList<String> list = new ArrayList<>(20);  // 初始容量为 20

这种方式适用于当你已经知道大概会有多少元素需要存储时,可以避免 ArrayList 多次扩展容量带来的性能开销。

2.3 使用现有集合创建 ArrayList:

你还可以通过将一个现有的集合(如 List 或 Set)传递给 ArrayList 构造函数来创建一个新的 ArrayList。

ArrayList<String> list = new ArrayList<>(existingList);

3. 常用方法

方法名说明
public boolean add(要添加的元素)将指定的元素追加到此集合的末尾
public boolean remove(要删除的元素)删除指定元素,返回值表示是否删除成功
public E remove(int index)删除指定索引处的元素,返回被删除的元素
public E set(int index,E element)修改指定索引处的元素,返回被修改的元素
public E get(int index)返回指定索引处的元素
public int size()返回集合中的元素的个数

3.1 添加元素

你可以通过 add() 方法将元素添加到 ArrayList 中:

list.add("Apple");
list.add("Banana");
list.add("Orange");
  • add(E e):将元素添加到列表的末尾。
  • add(int index, E element):在指定位置插入元素,其他元素会向后移动。

3.2 访问元素

你可以通过 get() 方法访问指定索引位置的元素:

String fruit = list.get(1);  // 获取索引为 1 的元素
  • get(int index):返回指定位置的元素。

3.3 修改元素

你可以通过 set() 方法修改指定索引位置的元素:

list.set(1, "Mango");  // 将索引 1 的元素改为 "Mango"
  • set(int index, E element):用指定的元素替换指定位置的元素。

3.4 删除元素

删除元素的方法有多种:

通过索引删除:

list.remove(1);  // 删除索引为 1 的元素

通过元素删除:

list.remove("Orange");  // 删除元素 "Orange"
  • remove(int index):根据索引删除元素。
  • remove(Object o):根据元素删除元素。

3.5 获取大小

ArrayList 提供了 size() 方法来获取当前列表中元素的个数:

int size = list.size();  // 获取 ArrayList 的大小
  • size():返回列表中元素的数量。

3.6 检查元素是否存在

可以使用 contains() 方法来检查 ArrayList 中是否包含某个元素:

boolean containsApple = list.contains("Apple");
System.out.println(containsApple);  // 输出: true
  • contains(Object o):检查 ArrayList 是否包含指定的元素。

3.7 清空列表

使用 clear() 方法可以删除 ArrayList 中的所有元素:

list.clear();  // 清空 ArrayList
  • clear():移除所有的元素。

3.8 检查是否为空

使用 isEmpty() 方法检查 ArrayList 是否为空:

boolean isEmpty = list.isEmpty();
System.out.println(isEmpty);  // 输出: false (如果列表不为空)
  • isEmpty():如果 ArrayList 为空,返回 true。

3.9 获取索引

你可以使用 indexOf() 方法来获取元素的索引,如果元素存在,返回其第一个出现的位置,若不存在则返回 -1。

int index = list.indexOf("Banana");  // 获取元素 "Banana" 的索引
  • indexOf(Object o):返回指定元素的索引位置。

3.10 子列表

你可以通过 subList() 方法获取一个指定区间的子列表:

List<String> sublist = list.subList(0, 2);  // 获取从索引 0 到 2 的子列表
  • subList(int fromIndex, int toIndex):返回一个包含指定范围元素的子列表。

4. 遍历 ArrayList

ArrayList 提供了多种方式来遍历其元素,常用的有以下几种:

4.1 使用增强型 for 循环:

for (String fruit : list) {
    System.out.println(fruit);
}

4.2 使用传统 for 循环:

for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}

4.3 使用 Iterator:

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

4.4 使用 Java 8 的 forEach() 方法:

list.forEach(fruit -> System.out.println(fruit));

5. 性能特点

ArrayList 提供了高效的随机访问性能,但在某些操作上可能会遇到性能瓶颈:

5.1 访问操作:O(1)

ArrayList 提供常数时间复杂度(O(1))的随机访问性能。这意味着你可以快速地通过索引访问任何元素。

5.2 插入和删除操作:O(n)

在数组中间或开头插入或删除元素时,由于需要移动其他元素,因此时间复杂度为 O(n)。但在末尾插入或删除元素的时间复杂度为 O(1),因为它不需要移动其他元素。

5.3 扩容:O(n)

ArrayList 会在需要时扩展其内部数组。当数组的容量达到上限时,ArrayList 会创建一个更大的数组,并将原始数组的元素复制到新的数组中。这种扩容操作的时间复杂度是 O(n)。

6. 扩容机制

ArrayList 会在元素数量超出当前容量时自动扩容。默认情况下,当数组的容量达到上限时,ArrayList 会将容量扩大为原来的 1.5 倍。例如,假设初始容量为 10,当容量满时,它会扩展到 15。当扩展时,ArrayList 会创建一个新的更大的数组,并将原数组的所有元素复制到新的数组中。

标签:java,删除,int,ArrayList,元素,list,索引,集合
From: https://blog.csdn.net/qq_48763502/article/details/145101842

相关文章

  • Java基于SSM-SpringBoot+Vue的流浪动物救助系统(源码+文档+运行视频+讲解视频)
    所需该项目可以在最下面查看联系方式,为防止迷路可以收藏文章,以防后期找不到项目介绍Java基于SSM-SpringBoot+Vue的流浪动物救助系统(源码+文档+运行视频+讲解视频)系统实现截图技术栈介绍JDK版本:jdk1.8+编程语言:java框架支持:springboot数据库:mysql......
  • 基于Java的污水处理管理系统 计算机专业毕业设计程序源码62343
    摘要基于Java的污水处理管理系统是一种基于现代信息技术的创新解决方案,旨在提高污水处理过程的效率和可持续性。该系统利用Java编程语言和相关技术开发,并结合大数据分析等技术,通过实时监测和远程控制,系统能够及时发现问题并采取相应措施,确保污水处理的稳定性和安全性。此外......
  • Java 邮件发送超时时间问题及优化方案详解
    哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者......
  • Java实现角色及菜单权限管理的全面解析与实战
    哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者......
  • 如何使用CSS3或JavaScript实现页面动画效果?
    要使用CSS3或JavaScript实现页面动画效果,可以根据具体需求选择合适的方法。以下是基于我搜索到的资料,详细说明如何使用CSS3和JavaScript实现页面动画效果:使用CSS3实现页面动画效果1.CSS3过渡和动画CSS3提供了强大的过渡和动画功能,可以轻松创建元素状态改变时的平滑效果。......
  • 03 Java流程控制
    1、用户交互ScannerJava的工具类,可以通过Scanner类来获取用户的输入。包名:java.util.Scannerimportjava.util.ScannerScannersc=newScanner(System.in);//sc.hasNext()与sc.hasNextLine()判断是否还有输入的数据if(sc.hasNextLine()){ //sc.next()与sc.nextLi......
  • 毕设学习第四天之Java的IO流
     File类File对象=newFile(路径名) 两个静态变量pathSeparatorChar提供系统级的路径分隔符字符。pathSeparator将其表示为字符串前者文件分隔符unix下为:,windows下为;,而后者无论哪个分隔符均为/  四大构造方法File(Stringpathname)通过给定的路径名字符串......
  • javaScript介绍
    JavaScript概述JavaScript是世界上最流行的脚本语言Java和JavaScript没有真正上的联系历史https://blog.51cto.com/u_39037/10505185ECMAScript它可以理解为是javaScript的一个标准快速入门引入JavaScript1.内部标签<script>//....</script>2.外部引用a......
  • 从入门到精通:Java 基础语法全解析,快速掌握核心编程技能
    系列文章目录01-从入门到精通:Java基础语法全解析,快速掌握核心编程技能文章目录系列文章目录前言一、Java的基本语法规则1.1Java程序结构1.1.1代码解析1.1.2Java的基本语法规则1.2Java的代码风格和规范二、变量与数据类型2.1变量的定义与使用2.1.1变量的声......
  • 方法引用与lambda底层原理&Java方法引用、lambda能被序列化么?
    系列文章目录和关于我0.引入最近笔者使用flink实现一些实时数据清洗(从kafka清洗数据写入到clickhouse)的功能,在编写flink作业后进行上传,发现运行的时候抛出:java.io.NotSerializableException,错误消息可能类似于“org.apache.flink.streaming.api.functions.MapFunctionimplemen......