簡體   English   中英

Java中的HeapSpace要求-Arrays.sort()與Collections.sort()

[英]HeapSpace requirement in java - Arrays.sort() vs Collections.sort()

我已經編寫了一種對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.lang.OutOfMemoryError:java.util.Arrays.copyOf(Arrays.java:3181)處的java.util.Arrays.copyOf(Arrays.java:3210)處的Java堆空間。 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)在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;
    }

它運行良好,並提供所需的結果。 為什么會這樣,有人可以解釋嗎? 謝謝 !

對於交換操作,應在使用set時調用add 因此,您正在不斷增加清單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM