如何在java中创建链接列表数组?

use*_*535 13 java graph linked-list

所以我需要输入二分图的边缘,如下所示:

6
1 3
1 2
1 5
2 7
2 4
2 9
Run Code Online (Sandbox Code Playgroud)

第一个数字是边数.之后列出边缘.看看例如顶点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++;
}
Run Code Online (Sandbox Code Playgroud)

但是我在添加行得到了nullpointerexception.

Ste*_*ein 22

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++;
}
Run Code Online (Sandbox Code Playgroud)

  • @ShubhamMittal @SuppressWarnings("未选中")这将取消警告.我更想知道为什么警告首先出现了. (6认同)
  • LinkedList &lt;Integer&gt; []顶点=新的LinkedList [5]; 执行上述操作时,为什么会收到以下警告?如何缓解呢?类型安全:类型LinkedList []的表达式需要未经检查的转换才能符合LinkedList &lt;Integer&gt; [] (2认同)
  • @jaamit @SuppressWarnings("unchecked") LinkedList&lt;Integer&gt;[] vertex = new LinkedList[5]; 为我工作。 (2认同)

run*_*ken 6

//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++;
}
Run Code Online (Sandbox Code Playgroud)

通常,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>());
Run Code Online (Sandbox Code Playgroud)