在 Java 中向数组和ArrayList添加元素

原文:https://www.studytonight.com/java-examples/add-elements-to-array-and-arraylist-in-java

数组是 Java 中相似对象的固定大小集合。ArrayList与数组非常相似,但是没有大小限制。

在本教程中,我们将学习如何在数组和ArrayList中插入元素。

数组和ArrayList的区别

在学习如何插入元素之前,让我们先快速了解一下数组和ArrayList之间的一些区别。

履行

数组是一种简单的线性数据结构,由 Java 提供。ArrayList 是 Java 中实现列表接口的类,是集合框架的一部分。ArrayList在内部使用数组进行操作。

访问和修改元素

数组的元素通过使用索引来访问和修改。ArrayList 类提供了 getter 和 setter 方法来访问和修改它的内容。

元素类型

数组能够存储基元类型和非基元类型。ArrayList只能存储非基元类型。然而,我们可以使用包装类来存储原始类型。

大小

如上所述,数组具有固定大小,而ArrayList具有动态大小。对于一个数组,我们需要在实例化过程中定义它的大小。我们不能超过这个尺寸限制。对于ArrayList,当我们需要向其中添加更多元素时,其大小会动态增加。创建了一个更大的新底层数组来容纳额外的项目。

附加元素

让我们学习如何向数组和ArrayList追加元素。追加意味着添加到结尾。

附加到数组

我们将首先创建一个更大尺寸的新数组。接下来,我们将把元素转移到这个新数组中。最后,我们可以在这个新数组的末尾添加新项。下面的代码演示了这一点。

import java.util.Arrays;

public class Demo
{
    public static int[] appendToArray(int[] arr, int elementToAdd)
    {
        int[] newArr = new int[arr.length + 1];//new array of larger size        
        //copying elements from old to new array
        for(int i = 0; i < arr.length; i++)
            newArr[i] = arr[i];        
        newArr[newArr.length - 1] = elementToAdd;//Adding the element        
        return newArr;
    }

    public static void main(String[] args)
    {
        int[] arr = {1, 2, 3, 4, 5, 6};
        System.out.println("Initial Array: " + Arrays.toString(arr));
        arr = appendToArray(arr, 7);
        arr = appendToArray(arr, 8);
        arr = appendToArray(arr, 9);
        System.out.println("After adding the element: " + Arrays.toString(arr));
    }
}

初始数组:[1,2,3,4,5,6] 添加元素后:[1,2,3,4,5,6,7,8,9]

Arrays类提供了一个简单的 copyOf() 方法,将元素从旧数组复制到新数组。该方法以旧数组和新数组的大小为参数。让我们通过使用 copyOf()方法而不是 for 循环来重写上面的代码。

import java.util.Arrays;

public class Demo
{
    public static int[] appendToArray(int[] oldArr, int elementToAdd)
    {
        //creating a new array and copying the elements 
        int[] newArr = Arrays.copyOf(oldArr, oldArr.length + 1);
        newArr[newArr.length - 1] = elementToAdd;
        return newArr;
    }    
    public static void main(String[] args)
    {
        int[] arr = {1, 2, 3, 4, 5, 6};
        System.out.println("Initial Array: " + Arrays.toString(arr));
        arr = appendToArray(arr, 7);
        arr = appendToArray(arr, 8);
        arr = appendToArray(arr, 9);
        System.out.println("After adding the element: " + Arrays.toString(arr));
    }
}

初始数组:[1,2,3,4,5,6] 添加元素后:[1,2,3,4,5,6,7,8,9]

附加到ArrayList

附加到ArrayList非常简单。这个类有一个 add() 方法,在列表的末尾添加一个元素。下面的代码演示了这一点。

import java.util.ArrayList;

public class Demo
{    
    public static void main(String[] args)
    {
        ArrayList<Integer> arrList = new ArrayList<>();
        arrList.add(1);
        arrList.add(2);
        arrList.add(3);
        System.out.println("ArrayList: " + arrList);
    }
}

数组列表:[1、2、3]

插入元素

现在让我们尝试在任何索引处插入元素。确保索引在边界内,以避免 IndexOutOfBoundsException。我们将

插入数组

首先,我们将创建一个新的数组来容纳额外的元素。要在给定的索引处插入,我们需要将该索引处的元素以及该索引之后的所有元素向右移动一个位置。

例如,考虑初始数组[10,20,30,40],我们需要在索引 1 处插入 50。元素 20、30 和 40 将向右移动一个位置。得到的数组将是[10,50,20,30,40]。

import java.util.Arrays;

public class Demo
{    
    public static int[] insertAtIndex(int[] arr, int elementToAdd, int index)
    {
        int[] newArr = new int[arr.length + 1];//new array of larger size        
        //Copying and adding the new element
        int currIdx = 0;
        for(int i = 0; i < newArr.length; i++)
        {
            if(i == index)
                newArr[i] = elementToAdd;
            else {
                newArr[i] = arr[currIdx];
                currIdx += 1;
            }
        }        
        return newArr;
    }
    public static void main(String[] args)
    {
        int[] arr = {10, 20, 30, 40};
        System.out.println("Initial Array: " + Arrays.toString(arr));
        arr = insertAtIndex(arr, 50, 1);
        System.out.println("After adding 50 at index 1: " + Arrays.toString(arr));
    }
}

初始数组:[10,20,30,40] 在索引 1 处添加 50 后:[10,50,20,30,40]

ArrayList中插入

add()方法有一个重载版本,它也接受我们想要添加元素的索引。项目从一个地方移到右边,为新项目腾出空间。

import java.util.ArrayList;

public class Demo
{    
    public static void main(String[] args)
    {
        ArrayList<Integer> arrList = new ArrayList<>();
        arrList.add(10);
        arrList.add(20);
        arrList.add(30);
        arrList.add(40);
        System.out.println("Initial ArrayList: " + arrList);        
        arrList.add(1, 50);
        System.out.print("After adding 50 at index 1: " + arrList);
    }
}

初始ArrayList:[10,20,30,40] 在索引 1 处添加 50 后:[10,50,20,30,40]

摘要

在数组中插入元素非常复杂。我们需要创建一个新数组,并传输旧数组的内容。然而,ArrayList提供了一个方便的 add()方法来追加或插入元素。请确保索引有效,以避免索引越界错误。注意,add()方法的最坏情况时间复杂度为 O(N) 。这是因为创建了一个新的底层数组。