我有一个脚本尝试从数组创建大小为2000的list (List<Integer>),然后将它们添加到result (List<List<Integer>>)中。它还将剩余的元素添加到结果列表中。代码试图通过调用list.clear重用size 2000的列表。
问题是,在将2000大小的第一个列表添加到结果列表后,该列表似乎会丢失。我期望在第一个if块结束时,显示结果元素0大小将给我2000年,但它会给出0。为什么?其余的结果令人费解,例如在第二个if块的末尾,其中结果内容为2个大小为51的列表。
请帮帮忙。
如果不使用list.clear(),而是使用list = new ArrayList<>();,我就会得到预期的结果。
public class Problem {
public static void main(String[] args) {
// Create chunks
List<List<Integer>> masterList = getChunks(getArray(2051));
// Display size
System.out.println("masterList: " + masterList.size());
}
// Create array
public static Integer[] getArray(int size) {
Integer[] arr = new Integer[size];
for (int i = 0; i < size; i++) {
arr[i] = i;
}
return arr;
}
// From input array, create lists of size 2000
public static List<List<Integer>> getChunks(Integer[] arr) {
List<List<Integer>> result = new ArrayList<>();
List<Integer> list = new ArrayList<>();
if (arr.length > 2000) {
for (int i = 0; i < arr.length; i++) {
// Add to list
list.add(i);
// If size == 2000, add list to result
if (i > 0 && i % 1999 == 0) {
System.out.println("list if 1: " + list.size()); // 2000
result.add(list);
list.clear();
System.out.println("empty if 1: " + list.isEmpty()); // true
System.out.println("result if 1:");
display(result); // size-0: 0 <== why??? I expect size-0: 2000
}
// Add remaining elements to result
if (i == arr.length-1 && list.size() > 0) {
System.out.println("i if 2: " + i); // 2050 <-- last element
System.out.println("list if 2: " + list.size()); // 51
result.add(list);
System.out.println("result if 2:");
display(result); // size-0: 51, size-1: 51
break;
}
}
} else {
System.out.println("arr < 2000"); // Not called
}
System.out.println("end result: " + result.size()); // 2
display(result); // size-0: 51, size-1: 51
return result;
}
public static void display(List<List<Integer>> list) {
for (int i = 0; i < list.size(); i++) {
System.out.println("size-" + i + ": " + list.get(i).size());
}
}
}发布于 2021-11-12 10:15:41
从程序中删除"list.clear()“,它将返回您的预期结果"2000”
https://stackoverflow.com/questions/69935517
复制相似问题