java-Arrays.sort()与Collections.sort()中的HeapSpace要求

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 =

我编写了一个方法,对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;
    }
公共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()但会增加从列表创建临时数组的开销。