为什么我打电话
ArrayList<String> reversedList = ListUtils.reverse(list);
正在修改原始列表,即使我在方法
中复制了它package com.javablackbelt.utils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
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);
ArrayList<String> reversedList = ListUtils.reverse(list);
ListUtils.print(reversedList);
String[] arrFromList = ListUtils.toArray(list);
ArrayUtils.print(arrFromList);
}
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());
}
public static ArrayList<String> reverse(ArrayList<String> aList) {
ArrayList<String> newList = aList;
Collections.reverse(newList);
return newList;
}
public static String[] toArray(ArrayList<String> list) {
ArrayList<String> newList = list;
String[] newStr = newList.toArray(new String[list.size()]);
return newStr;
}
}
答案 0 :(得分:3)
ArrayList<String> newList = aList;
未创建新列表。它创建了对同一列表的新引用。
可以通过以下方式创建新列表:
ArrayList<String> newList = new ArrayList<String>(aList.size());
for (String str : aList)
newList.add(str);
Thx @JB Nizet 这更简单:
ArrayList<String> newList = new ArrayList<String>(aList);
答案 1 :(得分:0)
当您说ArrayList<String> newList = aList;
时,您没有创建新列表,而是将newList指向aList
。如果您不想修改现有列表,请创建一个新的ArrayList并将aList
添加到newList
中。
public static ArrayList<String> reverse(ArrayList<String> aList) {
ArrayList<String> newList= new ArrayList<>();
newList.addAll( aList);
Collections.reverse(newList);
return newList;
}
修改强>
use Collections.copy(List dest, List src) to copy.