下面是我正在做的和我遇到的问题:我想“假”到动态数组的方式。这意味着,使用正常的数组结构,并且每当它满时,我会创建一个比旧数组大25%的新数组,然后将旧数组的元素复制到新数组中。在Java中使用数组结构的假动态数组
// 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];
但这似乎并没有被解决问题。
我也检查了所有我的空地方,事实证明,我有。该计划似乎是“放松”整个新增部分。
/*/
解决了!增加新元素是一个问题。现在都很好。谢谢你的帮助。将发布更多信息以供将来参考。
检查节点[i]对于某些我是否为空 – gefei
ArrayList实际上是用相同的想法实现的(但扩展因子不同)。 – nhahtdh
@gefei:是的,我有空,我的范围是我没有的。我认为这是与深层或浅层复制有关的事情,但我不确定。 – MelecioPonte