如何返回数组的副本? [复制]

Posted

技术标签:

【中文标题】如何返回数组的副本? [复制]【英文标题】:How to return a copy of an array? [duplicate] 【发布时间】:2014-03-08 20:32:14 【问题描述】:
 public void addStudent(String student) 
    String [] temp = new String[students.length * 2];
    for(int i = 0; i < students.length; i++)
    temp[i] = students[i];
        
    students = temp;
    students[numberOfStudents] = student;
    numberOfStudents++;

 

public String[] getStudents() 
    String[] copyStudents = new String[students.length];

    return copyStudents;


我试图让 getStudents 方法返回我在 addStudent 方法中创建的数组的副本。我不知道该怎么做。

【问题讨论】:

copyStudents=students.clone(); ***.com/questions/14149733/… 【参考方案1】:
System.arraycopy(students, 0, copyStudents, 0, students.length); 

【讨论】:

那么我会说 return copyStudents; ?【参考方案2】:

1) Arrays.copyOf

public String[] getStudents() 
   return Arrays.copyOf(students, students.length);;

2System.arraycopy

public String[] getStudents() 
   String[] copyStudents = new String[students.length];
   System.arraycopy(students, 0, copyStudents, 0, students.length); 
   return copyStudents;

3clone

public String[] getStudents() 
   return students.clone();

另请参阅answer,了解每种方法的性能。它们几乎一样

【讨论】:

【参考方案3】:

试试这个:

System.arraycopy(students, 0, copyStudents, 0, students.length);

【讨论】:

【参考方案4】:

Java 的System 类为此提供了一个实用方法:

public String[] getStudents() 
    String[] copyStudents = new String[students.length];
    System.arraycopy(students, 0, copyStudents, 0, students.length );

    return copyStudents;

【讨论】:

【参考方案5】:
System.arraycopy(Object source, int startPosition, Object destination, int startPosition, int length);

docu 中的更多信息,当然,在 SO 上已被问过万亿次,例如 here

【讨论】:

【参考方案6】:

您可以使用Arrays.copyOf() 创建您的数组的副本。

您也可以使用System.arraycopy()。

【讨论】:

【参考方案7】:

您可以使用Arrays.copyOf()。

例如:

int[] arr=new int[]1,4,5; 
Arrays.copyOf(arr,arr.length); // here first argument is current array
                               // second argument is size of new array.

【讨论】:

以上是关于如何返回数组的副本? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Numpy常用概念-对象的副本和视图向量化广播机制

数组(Array)的操作

js 操作方法

为啥 async.map 返回多个数组副本?

Swift 计算属性返回底层数组的副本

何时获取 numpy 数组的子矩阵返回视图但不返回副本?