簡體   English   中英

使用Java中的數組結構偽造動態數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM