访问内部使用的列表

时间:2013-06-20 00:55:41

标签: java list methods

我用Java编写Dijkstra算法。我的第一个方法

public void populateDijkstraFrom(Node startNode)

创建一个链接的节点列表及其各自的距离和前驱。我的第二种方法

public List<Node> getShortestPath(Node startNode, Node targetNode)

应该使用populateDijkstraFrom方法中的节点列表创建一个节点列表,其中包含从startNode到targetNode的最短路径。

但是,我不知道如何在getShortestPath方法中从我的Dijkstra方法访问节点列表。我可以将返回类型从void更改为LinkedList,但我被告知它使用void。

我该怎么做?

由于

3 个答案:

答案 0 :(得分:0)

据推测,你得到populateDijkstraFrom方法将其结果存储在封闭类的某个成员中,此时可以从getShortestPath访问它,例如:

public class Foobar {
    private List<Node> distances;

    public void populateDijkstraFrom(Node startNode) {
       // ...
       distances = ...
    }

    public List<Node> getShortestPath(Node startNode, Node targetNode) {
       // use distances here!
    }
}

答案 1 :(得分:0)

基本上有两种解决方法。

最简单的方法是返回方法上的节点列表

public List<Node> populateDijkstraFrom(Node startNode) {
       // ^ Configure to return list instead of void

    // ......
    return nodeList;
}

public List<Node> getShortestPath(Node startNode, Node targetNode) {
    List<Node> pdList = populateDijkstraFrom(startNode);
    // ^ --- Get the list by simply passing the same parameter to the method
}

Gian表示另一个

答案 2 :(得分:0)

取决于Node类的结构。

您无需更改签名。取决于你的结构。我希望有类似的东西(有适当的吸气剂和制定者)

public class Node {
    List<NodeConnection> nodeConnections;
}


public class NodeConnection {
    Node targetNode;
    long distance;
}

因此,您将遍历startNode上的nodeConnections以查找目标节点的路径。