我正在尝试通过创建类型为edge(包括source,dest,weight)的arraylist数组来创建图的邻接表,如以下代码所示:
public class Main {
static class Edge{
int s;
int d;
int wt;
Edge(int src,int des,int weight)
{
this.s = src;
this.d = des;
this.wt = weight;
}
}
public static void main(String[] args) throws Exception
{
//creating array of arraylist of type edge
ArrayList<Edge>[] graph = new ArrayList[7];
//Doubt regarding this line ,as why is it essential?
graph[0] = new ArrayList<Edge>();
//creating edge object
Edge e = new Edge(0,1,10);
//adding it into arraylist
graph[0].add(e);
}
由于我已经创建了类型为edge的arraylist数组,所以我认为我可以直接添加到诸如graph [0] .add(e)的arraylist中,而无需编写代码 graph [0] = new ArrayList();
但是没有它就无法工作。为什么当我的数组属于arraylist时为什么需要给出上述声明,所以我不能直接添加元素?
答案 0 :(得分:0)
此代码声明graph
为7个ArrayList
的数组,其元素最初(与所有数组一样)设置为其默认值-null
用于对象{{1 }}代表整数,0
代表布尔值:
false
您可以通过在下面添加以下行或通过调试器逐步进行测试:
ArrayList<Edge>[] graph = new ArrayList[7];
您的 System.err.println(graph[0]); // prints "null"
仅为(new ArrayList[7]
)个对象的数组保留了空间,但没有为要添加的7个新ArrayList
保留空间。例如,这允许您将ArrayLists
的子类添加到您的数组,或使用ArrayList
值保留一些插槽,或将相同的null
添加到多个插槽。在某些情况下,所有这些选项都可能有用,因此,除非您明确指定要这样做,否则编译器和语言不会创建空的新元素。我建议使用循环:
ArrayList