如何在Java中创建一个链表数组?

18

所以我需要输入一个二分图的边,格式如下:

6
1 3
1 2
1 5
2 7
2 4
2 9

第一个数字是边的数量。之后列出了边缘。例如,可以看到顶点1有多个不同的边缘,并且我想跟踪1连接到了什么,我考虑图形的每个顶点都会有一些与之连接的顶点列表,这导致我尝试创建一个链接列表数组,但我不确定如何做到这一点。我尝试过。

LinkedList<Integer>[] vertex = new LinkedList[5];
int i = 0, m = 6;
while(i!=m){
    int temp = sc.nextInt();
    int temp2 = sc.nextInt();
    vertex[temp].add(temp2);
    i++;
}

但是我在添加行处得到了一个空指针异常。


4
你还没有对数组中的元素进行初始化,只有数组本身被初始化了。 - Sotirios Delimanolis
你有没有考虑创建像 VertexEdge 这样的类?并在另一个名为 Graph 的类中拥有一个 List<Edge> - Rohit Jain
此外,数组使用从0开始的索引,这意味着大小为5的数组具有索引“0…4”。 - Sotirios Delimanolis
2个回答

32
LinkedList<Integer>[] vertex = new LinkedList[5];
int i = 0, m = 6;
while(i!=m){
  int temp = sc.nextInt();
  int temp2 = sc.nextInt();

  // Make sure the list is initialized before adding to it
  if (vertex[temp] == null) {
     vertex[temp] = new LinkedList<Integer>();
  }

  vertex[temp].add(temp2);
  i++;
}

5
vertex = new LinkedList[5]; 这段代码为什么会出现以下警告?如何解决?类型安全:需要对类型为LinkedList[]的表达式进行未经检查的转换,以符合LinkedList<Integer>[]。 - jaamit
2
@SuppressWarnings("unchecked") LinkedList<Integer>[] vertex = new LinkedList[5]; 对我来说有效。 - Shubham Mittal
17
@ShubhamMittal @SuppressWarnings("unchecked") 这会抑制警告。我更想知道为什么首先会出现这个警告。 - jaamit

8
//initialize array
LinkedList<Integer>[] vertex = new LinkedList[5];
//initialize array elements(objects of LinkedList)
for (int j=0; j<5; j++)
    vertex[i]=new LinkedList<Integer>();

int i = 0, m = 6;
while(i!=m){
    int temp = sc.nextInt();
    int temp2 = sc.nextInt();
    vertex[temp].add(temp2);
    i++;
}

通常在Java中不鼓励使用数组。您可以使用以下替代方法:

//initialize array
List<LinkedList<Integer>> vertex = new ArrayList<LinkedList<Integer>>();
//initialize arraylist elements(objects of LinkedList)
for (int j=0; j<5; j++)
    vertex.add(new LinkedList<Integer>());

vertex[i]=new LinkedList<Integer>(); 应改为 --> vertex[j]=new LinkedList<Integer>(); - Saheel Sapovadia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接