Java 创建邻接列表图

Java 创建邻接列表图,java,arrays,arraylist,data-structures,graph,Java,Arrays,Arraylist,Data Structures,Graph,我正试图通过创建edge类型的arraylist数组(包括source、dest、weight),为graph创建邻接列表,如下代码所示: 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;

我正试图通过创建edge类型的arraylist数组(包括source、dest、weight),为graph创建邻接列表,如下代码所示:

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);
        
        
        
    }
公共类主{
静态类边{
int-s;
int d;
int-wt;
边缘(内部src、内部des、内部重量)
{
这个.s=src;
d=des;
该重量=重量;
}
}
公共静态void main(字符串[]args)引发异常
{
//正在创建edge类型的arraylist数组
ArrayList[]图形=新的ArrayList[7];
//对这条线有疑问,因为为什么它是必要的?
图[0]=新的ArrayList();
//创建边对象
边e=新边(0,1,10);
//将其添加到arraylist中
图[0]。添加(e);
}
由于我已经创建了edge类型的arraylist数组,我想我可以直接添加到arraylist中,就像图[0]一样 图形[0]=新的ArrayList();


但是如果没有它,它就不能工作。为什么当我的数组是arraylist时,我需要给出上面的语句,这样我就不能直接添加元素了?

这段代码声明
graph
是一个由7个
arraylist
组成的数组,它的元素最初(与所有数组一样)将对象设置为默认值-
null
,整数设置为
0
,布尔设置为
false

    ArrayList<Edge>[] graph = new ArrayList[7];
您的
新ArrayList[7]
仅为(
ArrayList
)的数组保留空间对象,但没有为要添加的7个新的
ArrayList
保留空间。例如,这允许您将
ArrayList
的子类添加到数组中,或保留一些具有
null
值的插槽,或将相同的
ArrayList
添加到多个插槽中。所有这些选项在某些情况下都很有用,因此mpiler和language不会创建空新元素,除非您显式地使用它们来创建空新元素。我建议使用循环:

    ArrayList<Edge>[] graph = new ArrayList<>[7];
    for (int i=0; i<graph.length; i++) {
        graph[i] = new ArrayList<Edge>();
    }
ArrayList[]图形=新的ArrayList[7];

因为(int i=0;我可以回答你的问题吗?@Sweeper非常感谢你。是的,它回答了我的问题。
    ArrayList<Edge>[] graph = new ArrayList<>[7];
    for (int i=0; i<graph.length; i++) {
        graph[i] = new ArrayList<Edge>();
    }