我目前正在编写一个代码,它将向边缘添加邻居。但由于该项目的性质,我不会知道一条边将有多少个邻居。例如
verti.vertices[34].adjacencies = new Edge[2];
verti.vertices[41].adjacencies = new Edge[4];
正如您在 new Edge [2]
和 new Edge [4]
中看到的那样,我声明了该边将拥有的邻居数量,但是稍后在我的代码中,当程序添加邻居时,它可能会添加比最初声明的邻居更少的邻居,从而导致
java.lang.NullPointerException
我是否可以通过动态范围(类似于 Arraylist)来处理这个问题?
最佳答案
正如您所知,ArrayList
是操作大小动态的对象集合的最直接的解决方案。
如果不使用它,您有两种解决方案:
从源头上解决问题,一次完成
必须在包含数组的对象中定义数组的实际大小。
与 ArrayList 内部了解当前大小的操作类似。
/**
* The size of the ArrayList (the number of elements it contains).
*
* @serial
*/
private int size;
您可以引入一个 addEdge()
方法,将 Edge
对象添加到数组中并增加数组的实际大小。
public class Foo{
public Edge[] vertices;
private int size;
public void addEdge(Edge edge){
vertices[size++] = edge;
}
}
你可以这样写:
verti.vertices[34].addEdge(new Edge(...));
每次想要访问 Edge 元素时添加一个防护
例如:
for (Edge edge : verti.vertices[34].adjacencies ){
if (edge != null){
// do something
}
}
关于动态边需要 Java Graph 帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49207946/