java-Arrays.sort()与Collections.sort()中的HeapSpace要求
我编写了一个方法,对arrayList进行排序,并交换该arrayList中的连续元素。我面临一个问题- 如果我使用Collections.sort()实现该方法,它会给出heapsize错误,而如果我使用Arrays.sort()则不会,并且会成功运行java-Arrays.sort()与Collections.sort()中的HeapSpace要求,java,arrays,collections,heap-memory,Java,Arrays,Collections,Heap Memory,我编写了一个方法,对arrayList进行排序,并交换该arrayList中的连续元素。我面临一个问题- 如果我使用Collections.sort()实现该方法,它会给出heapsize错误,而如果我使用Arrays.sort()则不会,并且会成功运行 public ArrayList<Integer> sortAndSwap(ArrayList<Integer> a) { Collections.sort(a); for(int i =
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;
}
公共ArrayList sortAndSwap(ArrayList a){
收集.分类(a);
对于(int i=0;i
此方法给出以下误差-
线程“main”java.lang.OutOfMemoryError中出现异常:java堆空间
位于java.util.Arrays.copyOf(Arrays.java:3210)
copyOf(Arrays.java:3181)位于
grow(ArrayList.java:261)位于
ensureExplicitCapacity(ArrayList.java:235)位于
ensureCapacityInternal(ArrayList.java:227)位于
add(ArrayList.java:475)位于
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;
}
公共ArrayList sortAndSwap(ArrayList a){
整数[]arr=新整数[a.size()];
a、 toArray(arr);
数组。排序(arr);
对于(int i=0;i
它运行良好,并给出所需的结果。
为什么会这样,有人能解释吗?谢谢 对于您在应该使用
set
时调用的交换操作add
。
因此,您正在无休止地增加列表。对于您在应该使用
set
时调用的交换操作add
。
因此,您正在不断增加列表。谢谢!成功了。还有一件事,如果Arrays.sort()和Collections.sort()同样有效的话?Collections.sort()基于Arrays.sort()但是增加了从列表中创建临时数组的开销。谢谢!成功了。还有一件事,如果Arrays.sort()和Collections.sort()同样有效,那么Collections.sort()基于Arrays.sort()但会增加从列表创建临时数组的开销。