【问题标题】:OutOfMemoryError when trying to add to ArrayList at specified index [closed]尝试在指定索引处添加到 ArrayList 时出现 OutOfMemoryError [关闭]
【发布时间】:2015-02-05 00:32:18
【问题描述】:

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

谢谢!

【问题讨论】:

  • 在我看来,您一直在将新列表中的条目添加到新列表中。在这种情况下,您不太可能会用完要添加的条目。
  • 做一些调试,你有一个无限循环。
  • 您是否尝试过使用调试器查看此内容以了解您的代码此时正在做什么?

标签: java sorting arraylist


【解决方案1】:

每次您在内部for 循环中,您都会向newList 添加一个新元素。由于循环条件指定在j &lt; newList.size() 时继续,j 开始时小于大小,并且每次都向两者添加一个,j 永远不会达到newList.size() 并且您继续添加元素直到堆空间用完.

【讨论】:

  • 是的,就是这样,不敢相信我之前没看到!谢谢!
猜你喜欢
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
  • 2011-11-15
  • 2018-05-25
  • 2021-03-15
  • 2013-12-09
  • 2012-02-02
相关资源
最近更新 更多