我想将一个数组传递给一个方法,但我知道数组是通过引用传递的,所以原始数组被修改了。我发现的一种解决方法是在方法内创建数组的副本,然后修改副本,但是传递数组副本的最佳方法是什么,或者在方法内创建副本会更好。这是我的代码,看看 ArrayUtils 类中的 reverse 方法
package com.javablackbelt.utils;
import java.util.ArrayList;
import java.util.Arrays;
public class ListUtils {
public static void main(String arg[]) {
String[] arr = {"one", "two", "three", "four", "five"};
ArrayUtils.print(arr);
System.out.println();
String [] reversedArr = ArrayUtils.reverse(arr);
ArrayUtils.print(reversedArr);
System.out.println();
ArrayList<String> list = ArrayUtils.toArrayList(arr);
ListUtils.print(list);
}
public static void print(ArrayList<String> aStr) {
System.out.print("list: [ ");
for(String l: aStr)
System.out.print(l+" ");
System.out.println(" ] size: "+aStr.size());
}
}
package com.javablackbelt.utils;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
public class ArrayUtils {
public static void print(String[] arr) {
System.out.print("Array: [ ");
for(String str: arr) {
if(str != null)
System.out.print(str.toString()+" ");
}
System.out.print(" ] size: "+arr.length);
}
public static String[] reverse(String[] arr) {
String[] a = arr;
List<String> list = Arrays.asList(a);
Collections.reverse(list);
String[] newArr = (String[]) list.toArray();
return newArr;
}
public static ArrayList<String> toArrayList(String[] arr) {
ArrayList<String> arrList = new ArrayList<String>();
for(int i = arr.length-1; i >= 0; i--)
arrList.add(arr[i]);
return arrList;
}
}