Я написал метод, который сортирует массивList, и они обменивают последовательные элементы в этом массиве. Я столкнулся с проблемой -Требование HeapSpace в java - Arrays.sort() vs Collections.sort()
Если я реализую метод с помощью 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;
}
этот метод дает ошибку ниже -
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:3210) at java.util.Arrays.copyOf(Arrays.java:3181) at java.util.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) at Solution.wave(Solution.java:7) at 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;
}
Он работает отлично и дает желаемые результаты. Почему это происходит, может кто-нибудь объяснить? Благодаря !
Спасибо! это сработало. Еще одна вещь, если Arrays.sort() и Collections.sort() одинаково эффективны? –
Collections.sort() основан на массиве Arrays.sort(), но добавляет накладные расходы на создание временного массива из списка. – wero