[英]Fake dynamic array using array structure in Java
這是我正在嘗試做的事情和遇到的問題:我想“偽造”動態數組。 這意味着,使用正常的數組結構,並且每當數組滿時,我都會創建一個比舊數組大25%的新數組,然后將舊數組的元素復制到新數組中。
// Whenever my original nodes array is full
Node aNew[];
aNew = new Node[newDesiredSize];
//I create every new element in the new array for this to be a deep copy
for (int i=0; i<numVert; i++){
aNew[i] = new Node(nodes[i].getId());
}
nodes = aNew;
但這似乎不起作用,因為當我嘗試填充並訪問新創建的數組時,出現NullPointerException
錯誤。
我一直在為偽造動態數組的想法而斗爭,但是我顯然缺少了一些東西。
不允許使用ArrayList
或任何其他形式的真正動態結構。
/ * ** /
編輯:根據建議,我改變了
aNew[i] = new Node(nodes[i].getId());
至
aNew[i] = nodes[i];
但這似乎並不能解決問題。
我還檢查了我所有的空位,事實證明我有空位。 該程序似乎正在“失去”整個新增長的部分。
/ * /
解決了! 在增長中添加新元素是一個問題。 現在一切都很好。 謝謝你的幫助。 將發布更多信息以供將來參考。
看起來NPE是由getId調用引起的。
但是為什么仍然要創建一個新節點呢? 只是:
aNew[i] = nodes[i];
您的新數組應包含與舊數組相同的對象,而不是它們的副本。
另外,一旦一切正常,作為優化,請查看System.arrayCopy
以消除對循環的需要。
使用源代碼:-) java.util.ArrayList
做到這一點。 例如,參見grow()
方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.