尝试在指定索引处添加到 ArrayList 时出现 OutOfMemoryError

OutOfMemoryError when trying to add to ArrayList at specified index

我正在尝试使用字符串 ArrayList 进行插入排序:

private static ArrayList<String> sortList(ArrayList<String> list) {

        ArrayList<String> newList = new ArrayList<String>();
        String curWord, curOrdered;
        int comparison;

        for(int i=0; i < list.size(); i++) {

            curWord = (String) list.get(i);

            if(newList.isEmpty())
                newList.add(curWord);
            else {

                for(int j=0; j < newList.size(); j++) {

                    curOrdered = (String) newList.get(j);
                    comparison = curWord.compareTo(curOrdered);

                    if(comparison < 0)
                        newList.add(j, curWord);    // problem is here, heap runs out
                    else
                        newList.add(curWord);

                }

            }

            System.out.println(i);

        }

        return newList;

    }

但是,当我尝试添加到已排序的 ArrayList 时,我似乎 运行 超出了堆 space。我的外循环似乎只 运行 一次,但我无法弄清楚到底出了什么问题。

谢谢!

每次进入内部 for 循环时,都会向 newList 添加一个新元素。由于循环条件指定在 j < newList.size() 时继续,j 开始时小于大小,并且每次都加一,因此 j 永远不会达到 newList.size() 并且您保持添加元素直到堆 space 用完。