CodeGym /Java 博客 /随机的 /如何在 Java 中向数组添加新元素
John Squirrels
第 41 级
San Francisco

如何在 Java 中向数组添加新元素

已在 随机的 群组中发布
哦,Java 数组。它们是数以百计的初学者软件开发人员强烈爱恨的对象。向已经初始化的数组添加元素是不可能的,他们说......实际上,这是可能的,但不是经典意义上的......而且它不是很方便。向已初始化的数组添加新元素是一种技巧。然而,这些技巧可以在面试中派上用场……有时在程序员的工作中也能派上用场。为确保您喜欢使用数据类型并知道如何高效地使用它,我们编写了一份关于向 Java 数组添加新元素的指南。除了仔细阅读理论和代码示例外,请务必检查并完成帖子中的练习题。 如何在 Java 中向数组添加新元素 - 1

Java中的数组是什么

让我们回顾一下数组是什么以及如何在 Java 中创建它。如果您还记得这一点,请随时跳到下一个副标题“将新元素添加到 Java 数组的 5 种方法”。Oracle 的官方 Java 文档说数组是属于同一数据类型的一系列值。一组整数是Java 中数组的完美示例。您定义的所有值在数组中都有一个特定位置,称为索引。下面是声明和初始化数组的方法:

int[] myArray = new int[10];
int[] myArray1 = {1, 0, 3, 17, 5, 6, 7, 8, 9, 10}
在第一种情况下,我们定义了一个数组myArray并让 Java 为 10 个元素的数组分配空间,在第二个myArray1中,我们立即向其中输入 10 个值。在任何一种情况下,都不能简单地将元素 11 推入数组。要对数组执行操作,开发人员会操纵数组包含的值的索引。我们应该做什么?让我们来看看最常见的添加到数组的方法。

向 Java 数组添加新元素的 5 种方法

好吧,这里是我们让不可变看起来可变的技巧。
  • 将数组转换为列表
  • 创建一个容量更大的新数组,并向数组中添加新元素
  • 实施System.arraycopy()
  • 使用 Apache Commons 复制数组
  • 应用ArrayCopyOf()方法
让我们仔细看看这些向数组添加元素的方法。

1. 将数组转换为列表

由于我们不能直接向数组添加新元素,下一个最好的办法是将它们转换为列表,添加新元素,然后将值重新转换回数组。将数组转换为列表的第一种方法是使用asList()创建一个新的 ArrayList。成功转换值范围后,使用ListAdd()插入值。一旦不再需要编辑数组,就可以借助toArray()方法将其转换回原始数据类型。对于所有的方法和转换,一开始这似乎令人困惑。让我们看一下使用asList()清除问题的示例。

// Code for adding Java arrays to a program
import java.lang.*;
import java.util.*;
 
class ArrayDemo{
   //Let’s add a new element to an array
   public static Integer[] addX(Integer myArray[], int x) {
       int i;
       //turn array into ArrayList using asList() method
       List arrList = new ArrayList( Arrays.asList(myArray));
 
       // adding a new element to the array
       arrList.add(x);
 
       // Transforming the ArrayList into an array
       myArray = arrList.toArray(myArray);
       return myArray;
   }
   public static void main(String[] args) {
       int i;
       //initial array
       Integer myArray[] = { 0, 1, 2, 45, 7, 5, 17};
 
       //print the initial array out
       System.out.println("Initial Array: "
                          + Arrays.toString(myArray));
 
       //element to be added
       int x = 28;
 
       // call the method to add x in myArray
       myArray = addX(myArray, x);
 
       // print the updated array out
       System.out.println("Array with " + x + " added: "
                          + Arrays.toString(myArray));
   }
}
输出是:
初始数组:[0, 1, 2, 45, 7, 5, 17] 添加 28 的数组:[0, 1, 2, 45, 7, 5, 17, 28]
因此,在程序中我们成功创建了一个包含 7 个值的数组myArray,将其填入并打印出来。然后我们决定十个值对我们来说还不够。好吧,我们使用Arrays.asList方法将 myArray 转换为 ArrayList arrList 。这里是 28,要添加的元素。我们将它添加到 ArrayList arrList中,然后使用toArray()方法将其转换回数组并打印出新数组。

2.新建一个容量更大的数组

向数组添加更多元素的最常见方法之一是从头开始创建一个更大的新数组,放置旧数组的元素并添加新元素。这是该过程的分步演练:
  • 创建一个容量为 a+n 的新数组(a — 原始数组容量,n — 要添加的元素数)。
  • 将先前数据范围的所有元素以及新值添加到新数据范围。
  • 打印结果数组。
尝试自己创建这样一个数组,并将您的代码与以下示例中的代码进行比较:

// Java Program to add an element in an Array

import java.lang.*;
import java.util.*;

class ArrayDemo {
   //Method to add an element x into array myArray
   public static int[] addX(int myArray[], int x) {
       int i;

       // create a new array of a bigger size (+ one element)
       int newArray[] = new int[myArray.length + 1];

       // insert the elements from the old array into the new one
       for (i = 0; i < myArray.length; i++)
           newArray[i] = myArray[i];

       newArray[myArray.length] = x;
       return newArray;
   }

   public static void main(String[] args) {
       int i;

       // initial array of size 10
       int arr[]
               = {0, 1, 2, 45, 7, 5, 17};

       // print the initial array
       System.out.println("Initial Array: " + Arrays.toString(arr));

       // element to be added
       int x = 28;

       // call the addX method to add x in arr
       arr = addX(arr, x);
       // print the updated array
       System.out.println("Array with " + x + " added:" + Arrays.toString(arr));
   }
}
输出是:
初始数组:[0, 1, 2, 45, 7, 5, 17] 添加 28 的数组:[0, 1, 2, 45, 7, 5, 17, 28]
好吧,这种向数组中添加新元素的方法是最简单的方法。

3. 应用 System.arrayCopy()

System.arrayCopy()是一种广泛使用的方法,用于在源数组的目标位置分配更大的数组。开发人员可以在方法的括号中指定他想要复制到新数组的序列。要查看该方法的工作原理并尝试自己使用它,请查看并尝试运行下面的示例:

import java.util.Arrays;

class ArrayDemo {
   private static Integer[] addElement(Integer[] myArray, int newElement) {
       //we create a new Object here, an array of bigger capacity 
       Integer[] array = new Integer[myArray.length + 1];
       System.arraycopy(myArray, 0, array, 0, myArray.length);
       array[myArray.length] = newElement;
       return array;
   }

   public static void main(String[] args) {
       Integer[] myArray = {20, 21, 3, 4, 5, 88};
       System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
       myArray = addElement(myArray, 12);
       System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
   }
}
输出是:
添加新元素前的 myArray:[20, 21, 3, 4, 5, 88] 添加新元素前的 myArray:[20, 21, 3, 4, 5, 88, 12]
在这里,我们创建了一个数组myArray,打印出来并使用我们的addElement方法添加了一个新元素,该方法建立在System.arrayCopy()之上。

4.使用Apache Commons复制数组

让我们使用一种非标准的方式。即第三方库 Apache Commons lang。它是 Apache Commons 项目的一部分,专注于可重用 Java 组件的所有方面。有关该项目的知识不会是多余的。Apache Commons lang 有一个方法add()专门设计用于允许扩展数组,它节省了编码器大量的时间和精力。值得记住的是,此 Apache Commons add()方法基于调用System.arraycopy()方法,以防您必须回答棘手的考试或面试问题。要将这些库添加到您的项目中,请访问Apache Commons网站并下载这些库。然后转到 File → Project Structure → Libraries > + 并选择下载的 jar 文件。

import org.apache.commons.lang3.ArrayUtils;
import java.util.Arrays;

class ArrayDemo {
   private static <T> T[] append(T[] arr, T element) {
       return ArrayUtils.add(arr, element);
   }

   public static void main(String[] args) {
       Integer[] myArray = { 0, 1, 2, 3, 4};
       System.out.println("myArray: " + Arrays.toString(myArray));

       myArray = append(myArray, 5);
       System.out.println("new Array with the number added: " + Arrays.toString(myArray));
   }
}
输出是:
myArray: [0, 1, 2, 3, 4] 添加数字的新数组:[0, 1, 2, 3, 4, 5]

5. 实现 ArrayCopyOf()

ArrayCopyOf()是另一种向数组添加新元素的方法。例如 Apache Commons lang add()它在内部调用System.arraycopy()来执行此操作。然而,大多数开发人员更喜欢ArrayCopyOf(),因为它允许他们保持代码简洁和可读。下面是使用ArrayCopyOf()向数组添加新元素 的示例:

import java.util.Arrays;
class ArrayDemo {
   private static <X> X[] addElement(X[] myArray, X element) {
       X[] array = Arrays.copyOf(myArray, myArray.length + 1);
       array[myArray.length] = element;
       return array;
   }
   public static void main(String[] args) {
       Integer[] myArray = {20, 21, 3, 4, 5, 88};
       System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
       myArray = addElement(myArray, 12);
       System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
   }
}
输出是:
添加新元素前的 myArray:[20, 21, 3, 4, 5, 88] 添加新元素前的 myArray:[20, 21, 3, 4, 5, 88, 12]

结论

了解如何向数组添加元素有助于开发人员快速更新旧代码,而不会牺牲其功能和可读性……或者只是为了通过面试。由于向 Java 数组添加元素的方法多种多样,请随意选择您喜欢的方法。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION