简体   繁体   English

Java LinkedList数组引用

[英]Java LinkedList Array referencing

So I have a simple program that creates a LinkedList array of given size n, with each value in the list representing a new separate LinkedList data Structure. 因此,我有一个简单的程序,该程序创建给定大小n的LinkedList数组,列表中的每个值代表一个新的单独的LinkedList数据结构。

public class Graph {

public final LinkedList[] graph;

public Graph(int n){
    graph = new LinkedList[n];  

    for (int i=0; i<n; i++){
        graph[i] = new LinkedList();
    }

}

public void addEdge(int x, int y){

    graph[x].addFirst(y);
    graph[y].addFirst(x);

}

For some reason, however, when I call the addEdge() method with two int values, instead of adding them to the specific called LinkedList in graph[] , it adds them to every LinkedList in graph[] . 但是,由于某些原因,当我使用两个int值调用addEdge()方法时,不是将它们添加到graph[]特定的称为LinkedList中,而是将它们添加到graph[]每个LinkedList中。

What is the problem here? 这里有什么问题?

Edit:* 编辑:*

public void addEdge(int x, int y){

    graph[x].addFirst(y);
    graph[y].addFirst(x);

    for (int i=0; i<graph.length; i++){
        Node tmp = graph[i].first;

        System.out.println(i + ":");

        while (tmp != null){
            System.out.print(tmp.name + " ");

            tmp = tmp.Rnext;
        }
        System.out.println();
    }
    System.out.println();

}


public class Test {

public static void main(String[] args) {


    Graph myGraph1 = new Graph(8);
    myGraph1.addEdge(1, 2);
    myGraph1.addEdge(1, 7);
    myGraph1.addEdge(1, 4);
    myGraph1.addEdge(2, 5);
    myGraph1.addEdge(2, 6);
    myGraph1.addEdge(6, 3);
    myGraph1.addEdge(3, 8);
    myGraph1.addEdge(5, 7); 
    }
}

Here is the output of graph:
0:
1 2 
1:
1 2 
2:
1 2 
3:
1 2 
4:
1 2 
5:
1 2 
6:
1 2 
7:
1 2 

0:
1 7 1 2 
1:
1 7 1 2 
2:
1 7 1 2 
3:
1 7 1 2 
4:
1 7 1 2 
5:
1 7 1 2 
6:
1 7 1 2 
7:
1 7 1 2 

0:
1 4 1 7 1 2 
1:
1 4 1 7 1 2 
2:
1 4 1 7 1 2 
3:
1 4 1 7 1 2 
4:
1 4 1 7 1 2 
5:
1 4 1 7 1 2 
6:
1 4 1 7 1 2 
7:
1 4 1 7 1 2 

0:
2 5 1 4 1 7 1 2 
1:
2 5 1 4 1 7 1 2 
2:
2 5 1 4 1 7 1 2 
3:
2 5 1 4 1 7 1 2 
4:
2 5 1 4 1 7 1 2 
5:
2 5 1 4 1 7 1 2   
6:
2 5 1 4 1 7 1 2 
7:
2 5 1 4 1 7 1 2 

0:
2 6 2 5 1 4 1 7 1 2 
1:
2 6 2 5 1 4 1 7 1 2 
2:
2 6 2 5 1 4 1 7 1 2 
3:
2 6 2 5 1 4 1 7 1 2 
4:
2 6 2 5 1 4 1 7 1 2 
5:
2 6 2 5 1 4 1 7 1 2 
6:
2 6 2 5 1 4 1 7 1 2 
7:
2 6 2 5 1 4 1 7 1 2 

0:
6 3 2 6 2 5 1 4 1 7 1 2 
1:
6 3 2 6 2 5 1 4 1 7 1 2 
2:
6 3 2 6 2 5 1 4 1 7 1 2 
3:
6 3 2 6 2 5 1 4 1 7 1 2 
4:
6 3 2 6 2 5 1 4 1 7 1 2 
5:
6 3 2 6 2 5 1 4 1 7 1 2 
6:
6 3 2 6 2 5 1 4 1 7 1 2 
7:
6 3 2 6 2 5 1 4 1 7 1 2 

Here is the LinkedList and Node Class I am using: 这是我正在使用的LinkedList和Node类:

import java.util.NoSuchElementException;

public class LinkedList {

public static Node first;

    public LinkedList(){ 
    first = null;

    } 

    // Returns true if the list is empty 
    public boolean isEmpty(){ 
    return first == null; 
    } 

    // Inserts a new node at the beginning of this list. 
    public void addFirst(int name){ 

    first = new Node(name, first);
    }


    public boolean findData(int d){
    if(first == null) throw new NoSuchElementException();
    Node tmp = first;

    while (tmp != null) {

        if (tmp.name == d) return true;
        tmp = tmp.Rnext;
    } return false;
}
}


    public class Node { 

    public int name;
    public Node Rnext;

    public Node(){ 
    name = 0;
    Rnext = null; 
    } 

    public Node(int n, Node r){ 
    this.name = n;
    this.Rnext = r;
} 

}
public static Node first;

This is the problem. 这就是问题。 Every single LinkedList you make is sharing the same Node , so they're all effectively the same list. 您创建的每个LinkedList都共享相同的Node ,因此它们实际上都是相同的列表。

Don't use static for instance variables. 不要为实例变量使用static变量。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM