创建邻接表图

时间:2020-09-21 08:56:15

标签: java arrays arraylist data-structures graph

我正在尝试通过创建类型为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时为什么需要给出上述声明,所以我不能直接添加元素?

1 个答案:

答案 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