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

Bru*_*yne 0 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 = 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;
    }
Run Code Online (Sandbox Code Playgroud)

这个方法给出了以下错误 -

线程"main"中的异常java.lang.OutOfMemoryError:java.util中的Java.util.Arrays.copyOf(Arrays.java:3210)中的Java堆空间,java.util.Arrays.copyOf(Arrays.java:3181). ArrayList.grow(ArrayList.java:261)位于java.util.Array上的java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)java.util.ArrayList.add(ArrayList)中的java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227) .java:475)在Main.main的Solution.wave(Solution.java:7)(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;
    }
Run Code Online (Sandbox Code Playgroud)

它运行良好,并提供所需的结果.为什么会发生这种情况,有人可以解释一下吗?谢谢 !

wer*_*ero 6

对于add您应该使用时调用的交换操作set.所以你无休止地增加名单.