如何在Java中设置一个数组等同于另一个数组

859 阅读7分钟

本文讨论了在Java中设置一个数组等于另一个数组的方法。

数组是最基本的数据结构,它在连续的内存位置存储数据。对数组元素的操作是使用索引进行的。

设置一个数组变量与另一个数组变量相等

将一个数组变量设置为等于另一个数组变量来复制数组中的元素,这似乎是合乎逻辑的。

然而,有一个问题。当你设置一个数组变量等于另一个数组变量时,这两个变量都有引用。

因此,不是复制数组元素,而是复制了引用。在这种情况下,如果你使用其中一个数组变量改变了数组元素,那么这些变化就会反映在两个数组变量中。

因此,你不能通过简单的赋值操作(=)来复制数组元素。

在Java中使用clone()方法设置一个数组与另一个数组相等

clone() 方法创建一个调用它的对象的副本,并返回复制的对象的引用。

请注意,这个方法创建了一个深度拷贝。它意味着单独的内存被分配给新的对象。

这个方法被定义在对象类中,并返回一个类型为Object 的对象。下面给出了clone() 方法的定义。

protected Object clone()
                throws CloneNotSupportedException

在无法创建对象的克隆的情况下,该方法抛出一个CloneNotSupportedException

那些没有实现Cloneable 接口的类的对象是不能被克隆的。在这种情况下,clone() 方法会抛出该异常。如果你覆盖了clone() 方法,你的实现也应该抛出这个异常。

假设你有一个对象obj1 ,你对它调用clone() 。你把结果存储在obj2 。那么在这种情况下,obj2obj1 包含不同的引用,因此是不平等的。

让我们看一个Java的示例代码,使用clone() 方法将一个数组克隆到另一个数组中。

package java2blog;

public class ArrayExample {

public static void main(String\[\] args)
{
    int a \[\] = {1, 2, 3, 4, 5};
    int b \[\] = a.clone();

    System.out.print("a: ");

    for(int i=0;i

输出。

A: 1 2 3 4 5
B: 2 2 3 4 5

进一步阅读。

现金应用需要银行账户吗
       [阅读更多 →](https://java2blog.com/deep-copy-arraylist-java/)  
在Java中把Set转换为数组
       [阅读全文→](https://java2blog.com/java-set-to-array/)       

在Java中使用arraycopy()方法设置一个数组等于另一个数组

系统类的arraycopy() 方法将一个从特定位置开始的数组复制到另一个从特定位置开始的数组。
让我们看看这个方法的定义。

public static void arraycopy(Object src,
             int srcPos,
             Object dest,
             int destPos,
             int length)

该方法需要以下参数。

  • src:要复制的元素的源数组。
  • srcPos:src 中的起始位置,元素从那里被复制。
  • dest:拷贝到的目标数组。
  • destPos:: 要复制的元素在目标数组中的位置。
  • length: 要复制的元素的数量。

这个方法也会抛出各种异常。让我们来看看其中的每一个。

  • NullPointerException。如果srcdest 是空的,方法会抛出这个异常。

  • ArrayStoreException:该方法在各种情况下抛出这个异常,如下所述。

    • 如果srcdest 不是一个数组。
    • 如果srcdest 数组之间存在类型不匹配。例如,如果其中一个数组的类型是int ,另一个数组的类型是String ,方法会抛出这个异常。
  • IndexOutOfBoundsException:这个异常标志着对数组的访问超出了其分配的内存限制。

    因此,如果你提供的srcPosdestPos 是负数,或者如果length 超过了元素的数量,方法会引发这个异常。

让我们看看使用该方法将一个数组复制到另一个数组的代码。

package java2blog;

public class ArrayExample {

public static void main(String\[\] args)
{
    int a \[\] = {1, 2, 3, 4, 5};
    int b \[\] = new int \[a.length\];

    System.arraycopy(a, 0, b, 0, a.length);

    System.out.print("a: ");

    for(int i=0;i

注意,arraycopy() 方法是System类的静态方法。所以你可以只用类名来调用它,而不需要创建对象。

输出。

A: 1 2 3 4 5
B: 2 2 3 4 5

在Java中使用copyOf()方法设置一个数组与另一个数组相等

copyOf() 方法复制一个数组的内容并返回一个新的数组。
该方法需要两个参数,原始数组的引用和length ,表示从头开始复制的元素数量。

让我们看看copyOf() 方法的定义。

public static int[] copyOf(int[] original,
           int newLength)

注意,这个方法可以截断或用零来填充复制的数组。当提供的长度大于数组中的元素数时,填充将发生。

这个方法会抛出两个异常,如下所示。

  • NullPointerException:如果原始数组为空
  • NegativeArraySizeException:如果newLength 参数为负数。

让我们看看代码。

package java2blog;

import java.util.Arrays;

public class ArrayExample {

public static void main(String\[\] args)
{
    int a \[\] = {1, 2, 3, 4, 5};
    int b \[\] = Arrays.copyOf(a, a.length);

    System.out.print("a: ");

    for(int i=0;i

输出。

A: 1 2 3 4 5
B: 2 2 3 4 5

在Java中使用copyOfRange()方法设置一个数组与另一个数组相等

如果你需要在一个特定范围内复制一个数组的元素,那么copyOfRange() 是一个更好的选择。

这个方法的工作原理与copyOf() 方法类似,只是它接受三个参数,指定要复制的范围。

让我们看看copyOfRange() 方法的定义。

public static 

该方法定义指定了通用模板类型,这样它就可以用于所有的数据类型。

第一个参数original 是原始数组的引用,其中的元素将被复制。

第二个参数from ,指定了元素被复制的起始点。

最后一个参数to 标志着范围的结束。这意味着原数组中的元素被复制到新数组中,直到这里。

该方法会抛出以下异常。

  • NullPointerException:如果original 为空,该方法会抛出这个异常。
  • IllegalArgumentException:如果from 大于to ,该方法会抛出此异常。
  • ArrayIndexOutOfBoundsException:如果from 是负数或者大于原始数组的长度,该方法会抛出这个参数。

让我们来看看这个代码例子。

package java2blog;

import java.util.Arrays;

public class ArrayExample {

public static void main(String\[\] args)
{
    int a \[\] = {1, 2, 3, 4, 5};
    int b \[\] = Arrays.copyOfRange(a, 1, a.length-2);

    System.out.print("a: ");

    for(int i=0;i

请注意,代码只将第一个数组的第二和第三元素复制到第二个数组中。

输出。

A: 1 2 3 4 5
B: 2

通过迭代数组复制数组元素

复制数组元素的一个最简单的方法是使用索引遍历第一个数组,并将每个元素分配给第二个数组的相应索引。

你可以使用任何一种循环来迭代数组元素。

让我们看看这段代码。

package java2blog;

public class ArrayExample {

public static void main(String\[\] args)
{
    int a \[\] = {1, 2, 3, 4, 5};
    int b \[\] = new int \[a.length\];

    for(int i=0;i

注意,数组中的length 变量存储了数组中的元素数量。该代码将第一个数组复制到第二个数组中。

然而,代码也改变了第二个数组的第一个元素。你可能会注意到,只有第二个数组的元素被改变,而第一个数组保持不变。

输出。

A: 1 2 3 4 5
B: 2 2 3 4 5

总结

你已经看到了复制数组元素的不同方法。在使用预定义的方法时,你可以避免迭代。另外,arraycopy() 方法比clone() 方法快。

因此,根据需要选择最适合的方法是合乎逻辑的。例如,如果你需要在一个范围内复制元素,最适合的方法是copyOfRange() 方法。

以上就是关于如何在Java中设置一个数组等于另一个数组的全部内容。
希望你喜欢阅读这篇文章。请继续关注更多的文章。学习愉快!