У меня есть задача построить пирамиду, используя список чисел, но есть одна проблема с одним тестом. В моей задаче мне нужно отсортировать список. Я использую Collections.sort ():
Collections.sort(inputNumbers, (o1, o2) -> {
if (o1 != null && o2 != null) {
return o1.compareTo(o2);
} else {
throw new CannotBuildPyramidException("Unable to build a pyramid");
}
});
Но этот тест не проходит
@Test(expected = CannotBuildPyramidException.class)
public void buildPyramid8() {
// given
List<Integer> input = Collections.nCopies(Integer.MAX_VALUE - 1, 0);
// run
int[][] pyramid = pyramidBuilder.buildPyramid(input);
// assert (exception)
}
с OutOfMemoryError вместо моего собственного CannotBuildPyramidException (он будет брошен в другой метод после сортировки). Я понимаю, что это из-за TimSort в методе Collections.sort (). Я пытался использовать HeapSort, но я даже не мог поменять местами элементы, потому что мой список ввода был инициализирован как Arrays.asList (), и когда я использую метод set (), я получаю UnsupportedOperationException. Затем я попытался преобразовать мой список в обычный ArrayList
ArrayList<Integer> list = new ArrayList<>(inputNumbers);
, но я снова получил OutOfMemoryError. Не разрешено редактировать тесты. Я не знаю, что делать с этой проблемой. Я использую Java8 и IntelliJIdea SDK