Нужна Справка по Java Graph с динамическими краями
В настоящее время я пишу код, который будет добавлять соседей к краям. Но из-за характера проекта я не буду знать, сколько соседей будет у одного края. Например
verti.vertices[34].adjacencies = new Edge[2];
verti.vertices[41].adjacencies = new Edge[4];
как вы можете видеть в new Edge [2]
а также new Edge [4]
Я объявляю количество соседей, которое будет иметь кромка, однако позже в моем коде, когда программа добавляет соседей, она может добавить меньше соседей, чем было объявлено изначально, что приводит к
java.lang.NullPointerException
Могу ли я решить эту проблему с помощью динамического диапазона (похожего на Arraylist)?
1 ответ
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
}
}