小编Pas*_*gun的帖子

排序期间的 Java OutOfMemory

我有一项关于使用数字列表构建金字塔的任务,但一项测试存在一个问题。在我的任务中,我需要对列表进行排序。我使用 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");
            }
        });
Run Code Online (Sandbox Code Playgroud)

但是这个测试失败了

@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)
    }
Run Code Online (Sandbox Code Playgroud)

使用 OutOfMemoryError 而不是我自己的CannotBuildPyramidException(排序后会在另一个方法中抛出)。我知道这是因为 Collections.sort() 方法中的 TimSort。我尝试使用 HeapSort,但我什至无法交换元素,因为我的输入列表被初始化为 Arrays.asList(),当我使用 set() 方法时,我得到了 UnsupportedOperationException。然后我尝试将我的列表转换为常见的 ArrayList

ArrayList<Integer> list = new ArrayList<>(inputNumbers);
Run Code Online (Sandbox Code Playgroud)

但我又遇到了 OutOfMemoryError。不允许编辑测试。我不知道如何处理这个问题。我使用 Java8 和 IntelliJIdea SDK

java sorting exception out-of-memory

6
推荐指数
1
解决办法
192
查看次数

标签 统计

exception ×1

java ×1

out-of-memory ×1

sorting ×1