[英]OutOfMemoryError when trying to add elements from a B+Tree to an ArrayList
我正在嘗試遍歷 B+ 樹並將葉子中的元素添加到 ArrayList 中,代碼如下:
public void toArrayList(Node node){
Node currentNode = node;
if(currentNode instanceof InnerNode){
InnerNode inner = (InnerNode) currentNode;
int i = 0;
int temp = inner.children.length;
while(i < temp){
currentNode = inner.children[i];
toArrayList(currentNode);
i++;
}
}
if(currentNode instanceof LeafNode){
LeafNode leaf = (LeafNode) currentNode;
int j = 0;
int temp = leaf.values.length;
while(j < temp){
if(leaf.values[j] != null) {
retArray.add(leaf.values[j]);
}
j++;
}
}
}
它的作用是檢查節點是內部節點還是葉節點的實例。 如果它是一個內部節點,它會遞歸地調用 function 及其每個子節點。 如果它是葉節點,則它將值添加到 ArrayList 中。 但是,在運行此功能時,我最終得到了java.lang.OutOfMemoryError
。
有沒有辦法讓我的代碼更有效率,或者我應該采取不同的方法來處理這種方法?
除非你的樹結構中有幾百萬個元素,否則這里發生的事情是一些 InnerCode 包含它自己,因此這段代碼會一直運行下去,或者至少直到你的retArray
填滿。
另請注意,如果葉節點是內部節點的最后一個子節點,則此代碼將添加兩次葉節點。 我強烈建議你不要像這樣覆蓋本地人。 此外,這里的 for 循環更加緊湊(請注意,縮小此代碼不會對memory問題產生任何影響;OOMError 指的是堆,而本地人並不住在那里)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.