我编写了一个对arrayList进行排序的方法,它们交换了该arrayList中的连续元素。我正面临一个问题 -
如果我使用Collections.sort()实现该方法,则会出现heapsize错误,而如果我使用Arrays.sort()则不会成功运行。
public ArrayList<Integer> sortAndSwap(ArrayList<Integer> a) {
Collections.sort(a);
for(int i = 0; i < a.size()-1; i+=2) {
int temp = a.get(i);
a.add(i, a.get(i+1));
a.add(i+1, temp);
}
return a;
}
此方法给出以下错误 -
线程中的异常&#34; main&#34; java.lang.OutOfMemoryError:Java堆空间 在java.util.Arrays.copyOf(Arrays.java:3210)at java.util.Arrays.copyOf(Arrays.java:3181)at java.util.ArrayList.grow(ArrayList.java:261)at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227)at java.util.ArrayList.add(ArrayList.java:475)at Main.main(Main.java:322)中的Solution.wave(Solution.java:7)
如果我按如下方式修改
public ArrayList<Integer> sortAndSwap(ArrayList<Integer> a) {
Integer []arr = new Integer[a.size()];
a.toArray(arr);
Arrays.sort(arr);
for(int i = 0; i < a.size()-1; i+=2) {
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
a = new ArrayList<Integer>(Arrays.asList(arr));
return a;
}
它运行良好并给出了预期的结果。 为什么会发生这种情况,有人能解释一下吗?谢谢!
答案 0 :(得分:6)
对于交换操作,当您使用add
时,请致电set
。
所以你无休止地增加了这份名单。