Java 集合系列(二)ArrayList详解

Java 集合系列(二)ArrayList详解

一、ArrayList概述

ArrayList是Java中最常用的集合类之一,其底层是由数组实现的动态数组结构。与数组相比,ArrayList具有容量可动态增加、元素可动态删除、插入,方便灵活,更加适合实际业务需求。

二、ArrayList常用操作

1.创建ArrayList集合

通过无参构造器可以创建一个初始容量为10的ArrayList集合:

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

通过指定初始容量的构造器可以创建一个指定初始容量的ArrayList集合:

ArrayList<Object> list = new ArrayList<>(20);

或者通过直接添加元素的方式来创建ArrayList集合:

ArrayList<Object> list = new ArrayList<>(Arrays.asList(1,2,3,4))

2.向ArrayList中添加元素

ArrayList集合通过调用add()方法来添加元素,示例代码:

ArrayList<Object> list = new ArrayList<>();
list.add(1);
list.add("list");
list.add(3.14);

3.获取ArrayList中的元素

通过调用get()方法可以获取ArrayList中指定索引位置的元素,示例代码:

System.out.println(list.get(0));  // 输出结果为1

4.修改ArrayList中的元素

通过调用set()方法可以修改ArrayList中指定索引位置的元素,示例代码:

list.set(1, "newList");

5.删除ArrayList中的元素

通过调用remove()方法可以删除ArrayList中指定元素,示例代码:

list.remove(0);  // 删除第一个元素

6.遍历ArrayList

通过for循环或者迭代器等方式可以对ArrayList进行遍历,示例代码:

for (Object obj : list) {
    System.out.println(obj);
}

三、ArrayList性能分析

1.数组扩容

ArrayList在执行添加元素操作时,如果发现当前数组的容量不足以容纳所有元素,就会进行数组扩容。扩容的基本算法是创建一个新的数组,并将原数组中的元素复制到新数组中。这个过程的时间复杂度为O(n),其中n为列表的长度。

2.尾部添加元素

由于ArrayList底层是由数组实现的,因此它对于尾部添加元素的效率是非常高的,时间复杂度为O(1)。

3.中间插入、删除元素

由于ArrayList底层是由数组实现的,因此对于中间插入、删除元素的效率较低,时间复杂度为O(n)。

四、ArrayList示例

1.向一个ArrayList集合中添加10000个整数

本示例演示向ArrayList集合中添加10000个随机整数,以测试集合添加元素性能。测试程序如下:

public class ArrayListDemo {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();

        long startTime = System.currentTimeMillis();

        for (int i = 0; i < 10000; i++) {
            list.add((int) (Math.random() * 10000));
        }

        long endTime = System.currentTimeMillis();

        long timeElapsed = endTime - startTime;

        System.out.println("ArrayList添加10000个元素的时间:" + timeElapsed + "ms");
    }
}

输出结果:

ArrayList添加10000个元素的时间:5ms

2.使用ArrayList实现顺序栈

本示例演示如何使用ArrayList实现简单的顺序栈数据结构,顺序栈的基本特点是后进先出。

import java.util.ArrayList;

public class ArrayStack {

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

    public void push(int element) {
        list.add(element);
    }

    public int pop() {
        int lastIndex = list.size() - 1;
        int lastElement = list.get(lastIndex);
        list.remove(lastIndex);
        return lastElement;
    }
}

五、总结

本篇文章主要讲解了Java中的ArrayList集合,包括创建ArrayList、向ArrayList中添加元素、获取、修改、删除ArrayList中的元素、遍历ArrayList,以及ArrayList的性能分析。同时,本文还提供了两个示例,以演示ArrayList的常见用法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 集合系列(二)ArrayList详解 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 订单30分钟未支付自动取消怎么实现?

    目录 了解需求 方案 1:数据库轮询 方案 2:JDK 的延迟队列 方案 3:时间轮算法 方案 4:redis 缓存 方案 5:使用消息队列 了解需求 在开发中,往往会遇到一些关于延时任务的需求。最全面的Java面试网站 例如 生成订单 30 分钟未支付,则自动取消 生成订单 60 秒后,给用户发短信 对上述的任务,我们给一个专业的名字来形容,那就是延时任务…

    Java 2023年4月28日
    00
  • Java 对 Properties 文件的操作详解及简单实例

    Java 对 Properties 文件的操作详解及简单实例 在Java中,Properties文件是一种常见的配置文件格式,通常用于编写和读取应用程序的配置信息和设置属性。Properties文件是一种文本文件,内容以”key=value”的形式存储,可以使用Java代码来读取和写入。 读取 Properties 文件 为了读取Properties文件,需…

    Java 2023年6月15日
    00
  • 如何将Object类转换为实体类

    将Object类转换为实体类,其实就是将一个Java对象转换为另一个Java对象的过程。这个过程在Java开发中非常常见,例如从数据库中查询出数据后,需要将ResultSet中的结果转换为实体类对象。在下面的文章中,将详细讲解如何将Object类转换为实体类,并且提供两个Java代码示例。 步骤一:创建实体类 在将Object转换为实体类之前,需要先创建实体…

    Java 2023年5月26日
    00
  • Ajax实现注册并选择头像后上传功能

    下面我将详细讲解“Ajax实现注册并选择头像后上传功能”的完整攻略。 实现步骤 1. 注册功能 首先,在前端页面中设计一个注册表单,表单中包含必要的字段,例如“用户名”、“密码”、“邮箱”等。当用户填写完表单后,通过Ajax将表单数据提交到后台进行处理。后台需要对用户提交的信息进行验证,例如判断用户名是否已存在、判断邮箱格式是否正确等等。若验证通过,则在后台…

    Java 2023年6月15日
    00
  • Java中的逻辑结构详解

    Java中的逻辑结构详解 什么是逻辑结构? 在计算机科学领域中,逻辑结构是程序中的控制结构,用于描述程序执行的流程。通常情况下,逻辑结构包括三种基本类型:顺序结构、选择结构和循环结构。 顺序结构 顺序结构是指程序按照一定的顺序执行,每个语句按照先后顺序执行,直到程序结束。在Java中,顺序结构是最基本的结构。 public class Example1 { …

    Java 2023年5月26日
    00
  • SpringBoot浅析安全管理之基于数据库认证

    SpringBoot浅析安全管理之基于数据库认证 在SpringBoot中,我们可以使用Spring Security来实现安全管理。本文将以基于数据库认证的方式为例,讲解SpringBoot安全管理的实现过程。 基础知识 在使用Spring Security进行安全管理之前,我们需要掌握以下一些基础知识: Spring Security的基本概念(如认证、…

    Java 2023年6月3日
    00
  • C#中Request.Cookies 和 Response.Cookies 的区别分析

    下面是详细的攻略: Request.Cookies 和 Response.Cookies 的区别分析 在C#中,Request.Cookies和Response.Cookies都是用来操作HttpCookie的。但它们分别代表了不同的Http上下文,有着不同的作用。下面我们详细分析一下它们的区别。 Request.Cookies Request.Cookie…

    Java 2023年6月15日
    00
  • java8异步调用如何使用才是最好的方式

    Java 8的异步处理使得编写高效、可伸缩和可维护的应用程序变得更加容易。在本文中,我们将讨论Java 8异步调用的最佳实践。以下是步骤: 步骤一:使用CompletableFuture Java 8中引入的CompletableFuture是一个非常有用的类,可以轻松地进行异步调用和结果处理。要使用它,您需要使用两个主要方法: supplyAsync() …

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部