尝试在指定索引处添加到 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 用完。
我正在尝试使用字符串 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 用完。