Java 尝试在指定索引处添加到ArrayList时发生OutOfMemoryError
我正在尝试使用字符串的ArrayList执行插入排序:Java 尝试在指定索引处添加到ArrayList时发生OutOfMemoryError,java,sorting,arraylist,Java,Sorting,Arraylist,我正在尝试使用字符串的ArrayList执行插入排序: private static ArrayList<String> sortList(ArrayList<String> list) { ArrayList<String> newList = new ArrayList<String>(); String curWord, curOrdered; int comparison;
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排序列表(ArrayList列表){
ArrayList newList=新的ArrayList();
字符串curWord,curOrdered;
整数比较;
对于(int i=0;i
然而,当我尝试添加到排序的ArrayList时,我似乎用完了堆空间。我的外循环似乎只运行了一次,但我不知道到底出了什么问题
谢谢 每次进入
for
循环的内部时,都会向新列表添加一个新元素。由于循环条件指定在j
时继续,因此j
开始时小于大小,并且每次向两者添加一个,因此j
永远不会达到newList.size()
并且您一直添加元素,直到堆空间用完。在我看来,您似乎一直在将条目从newList添加到newList。在这种情况下,您不太可能会用完要添加的条目。进行一些调试,您在其中有一个无限循环。您是否尝试使用调试器查看这一点,以了解您的代码此时正在做什么?是的,就是这样,不敢相信我之前没有看到它!谢谢