我是Java新手,这可能真的很容易,但是我坚持使用它。我必须创建代表图表中所有节点的Node类。我将使用它来实现dfs之类的基本算法。我只需要使用一个字段,该字段是节点所有邻居的ArrayList。每个创建的节点都对其邻居进行引用。到目前为止,这是我的课程:

public class Node{
    protected ArrayList<Node> neighbours = new ArrayList<>();

    public Node(ArrayList<Node> neighbours){
        for(int i=0;i<neighbours.size();i++){
            this.neighbours.add(neighbours.get(i));
        }

    }
    public void setNeighbours(ArrayList<Node> neighbours){
        this.neighbours=null;
    }
    public ArrayList<Node> getNeighbours(){
        return this.neighbours;
    }
}


例如,在这种情况下,我有Node A = new Node([B,C]),这是可以的。有时我不想将A用作ArrayList [B,C],而只是将其用作Node A,它仍应指向[B,C]。这可以实现吗?我该怎么办?也许我的课程为此需要一个更多的构造函数?任何帮助表示感谢,谢谢。

最佳答案

最好不要使用传入的列表,而是复制其内容:

public void setNeighbours(ArrayList<Node> neighbours){
    this.neighbours.clear();
    this.neighbours.addAll(neighbours);
}


因为如果您使用它,则另一个过程可能会在您的班级不知道更改的情况下对其进行更改。

09-05 05:44