这就是我正在尝试做的事情和我遇到的问题:我想“伪造”到动态数组的方式。这意味着,使用普通的数组结构,只要它已满,我就会创建一个比旧数组大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];
但这似乎并没有解决问题。
我还检查了所有我的空位,结果证明我有。该计划似乎“失去了”整个新成长的部分。
/ * /
解决!在增长过程中添加新元素是一个问题。现在一切都很好。谢谢你的帮助。将发布更多信息以供将来参考。
答案 0 :(得分:2)
看起来NPE是由getId调用引起的。
但是为什么要创建一个新节点呢?只是:
aNew[i] = nodes[i];
您的新数组应包含与旧数组相同的对象,而不是它们的克隆。
一旦它全部正常工作,作为优化,请查看System.arrayCopy
以消除对循环的需求。
答案 1 :(得分:2)
使用来源:-) java.util.ArrayList
这样做。例如,参见grow()
方法