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

时间:2015-02-05 00:32:19

标签: java sorting arraylist

我尝试使用字符串的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时,我似乎耗尽了堆空间。我的外循环似乎只运行一次,但我无法弄清楚到底出了什么问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

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