編輯: commaString操作不是問題。是我的錯。見下文。在Arrays.asList(str.split(「,」)) - >由於錯誤遞歸的Stackoverflow
我寫了一個方法將逗號字符串轉換爲字符串列表。 但我在這種方法中得到了一個stackoverflow。
Exception in thread "main" java.lang.StackOverflowError
at java.util.ArrayList.subList(Unknown Source)
at java.lang.String.split(Unknown Source)
at java.lang.String.split(Unknown Source)
at de.dhbw.horb.routePlanner.SupportMethods.commaStrToStrList(SupportMethods.java:82)
public static List<String> commaStrToStrList(String commaStr) {
if (commaStr == null)
return null;
return new ArrayList<String>(Arrays.asList(commaStr.split(",")));
}
那麼,爲什麼會出現這種情況?我的commaStr大嗎?如果是的話,還有什麼可以用於這個?
的方法doNextNode(ID)是一個遞歸: https://github.com/Spenhouet/RoutenplanerProjekt/blob/master/Routenplaner/main/de/dhbw/horb/routePlanner/parser/JDomGraphDataCreator.java
編輯:
的問題是由於我的遞歸方法缺失的條款。所以遞歸非常深入。起初,我將我的最大堆棧大小推到了3GB(-Xss3g),但它在內存不足的情況下異常結束。 :/
然後我想,如果有可能我的遞歸在某一點開始,並且一次又一次地做同樣的事情。因此,我添加了一張保存每個訪問節點(id)的地圖,並刪除失敗的重新定位節點(回溯)。
現在它就像一個魅力。 感謝Marco13指出我的遞歸最終變得越來越深。
什麼是commaStr? –
如果你的返回類型是List,你爲什麼把它放到一個新的ArrayList中?難道你不能只返回'Arrays.asList'? – MightyPork
@Rod_Algonquin類似於以下內容:「第一,第二,第三,第四」 – Spen