anArrayList
的 an ArrayList
,只要认为外部对象是 anArrayList
就完成了。
ArrayList<ArrayList<Integer>> list2d = new ArrayList<ArrayList<Integer>>();
// add an element to the list
list2d.add(new ArrayList<Integer>());
// retrieve a list
ArrayList<Integer> list1d = list2d.get(0);
// add an integer
list2d.get(0).add(123);
顺便说一句,邻接表只是边的列表,不需要为每个顶点存储它们,尤其是在图是无向的情况下。一个列表Edge
就足够了:
class Edge {
Vertex v1, v2;
}
ArrayList<Edge> adjacencyList;
如果您想基于每个顶点存储它们,那么您可以通过将边封装在顶点类本身内来避免使用列表列表,但这将需要两倍的边:
class Vertex {
int value;
ArrayList<Vertex> adjacency;
}
但哪个最好取决于您需要在图表上执行哪种操作。对于小图,没有实际区别。
另一种可能的实现,如果您只需要知道两个顶点是否连接:
class Edge {
public final int v1, v2;
public boolean equals(Object o) { return o != null && o instanceof Edge && o.hashCode() == hashCode(); }
public int hashCode() { return v1 ^ v2; } // simple hash code, could be more sophisticated
}
Set<Edge> adjacencyList = new HashSet<Edge>();