我已经编写了一个方法,它对arrayList进行排序,并交换该arrayList中的连续元素。我面临一个问题-
如果我使用Collections.sort()实现该方法,则会产生堆大小错误,而如果使用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;
}此方法给出以下错误-
线程“主”java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)中的异常: java.util.Arrays.copyOf(Arrays.java:3210)、java.util.Arrays.copyOf(Arrays.java:3181)、java.util.ArrayList.grow(ArrayList.java:261)、java.util.ArrayList.grow(ArrayList.java:261)、java.util.ArrayList.add(ArrayList.java:475)和Solution.wave(Solution.java )的Java堆空间:7)在Main.main(Main.java:322)
而如果我按以下方式修改它
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;
}它运行良好,并取得了预期的结果。为什么会这样,有人能解释一下吗?谢谢!
发布于 2015-07-16 11:14:32
对于应该使用add的交换操作,您可以调用set。所以你在无止境地增加名单。
https://stackoverflow.com/questions/31452446
复制相似问题