英文:
Creating adjacency List Graph
问题
我正试图通过创建类型为“Edge”的数组列表数组(包括源、目标、权重)来为图创建邻接表,如下面的代码所示:
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 {
// 创建类型为 Edge 的数组列表数组
ArrayList<Edge>[] graph = new ArrayList[7];
// 对于这一行存在疑问,为什么是必要的呢?
graph[0] = new ArrayList<Edge>();
// 创建 Edge 对象
Edge e = new Edge(0, 1, 10);
// 将其添加到数组列表中
graph[0].add(e);
}
}
由于我已经创建了类型为“Edge”的数组列表数组,我认为我可以直接像 graph[0].add(e)
这样添加到数组列表中,而不需要编写 graph[0] = new ArrayList<Edge>();
这一行代码。
但是如果没有这行代码,就不能正常工作。为什么我需要提供上述语句?既然我的数组是数组列表,我不能直接添加元素吗?
英文:
I am trying to create adjacency list for graph by creating array of arraylist of type edge(include source,dest,weight) as in code below :
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);
}
Since I have created array of arraylist of type edge , I think I can directly add into arraylist like graph[0].add(e) without writing
graph[0] = new ArrayList<Edge>();
but it isn't working without it. Why I need to give above statement when my array is of arraylist so can't I add the elements directly?
答案1
得分: 0
这段代码声明了一个由 7 个 ArrayList
组成的数组 graph
,其元素最初(与所有数组一样)被设置为它们的默认值 - 对象为 null
,整数为 0
,布尔值为 false
:
ArrayList<Edge>[] graph = new ArrayList[7];
你可以通过添加以下代码来进行测试,或者使用调试器逐步执行:
System.err.println(graph[0]); // 输出 "null"
你的 new ArrayList[7]
仅为一个(ArrayList
)对象数组保留了空间,但没有为你想要添加的 7 个新 ArrayList
保留空间。这允许你添加 ArrayList
的子类到数组中,或者将某些槽位保留为空值,或者将相同的 ArrayList
添加到多个槽位。所有这些选项在某些情况下都可能有用,因此编译器和语言不会创建空的新元素,除非你明确要求这样做。我建议使用循环来完成:
ArrayList<Edge>[] graph = new ArrayList[7];
for (int i=0; i<graph.length; i++) {
graph[i] = new ArrayList<Edge>();
}
英文:
This code declares graph
to be an array of 7 ArrayList
, with its elements initially (as in all arrays) set to their default values - null
for objects, 0
for integers, false
for booleans:
ArrayList<Edge>[] graph = new ArrayList[7];
You can test it by adding this line below, or by stepping through with a debugger:
System.err.println(graph[0]); // prints "null"
Your new ArrayList[7]
only reserved space for an array of (ArrayList
) objects, but did not reserve space for the 7 new ArrayLists
you want to add. This allows you, for instance, to add subclasses of ArrayList
to your array, or leave some slots with a null
value, or add the same ArrayList
to several slots. All of these options can be useful in some cases, so the compiler and language do not create empty new elements unless you explicitly them to do so. I would recommend using a loop:
ArrayList<Edge>[] graph = new ArrayList<>[7];
for (int i=0; i<graph.length; i++) {
graph[i] = new ArrayList<Edge>();
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论