Нужна Справка по 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
   }
}
Другие вопросы по тегам