如何为两个ArrayLists交叉引用字符串变量以返回这些字符串的对象?

时间:2014-12-19 07:48:03

标签: java arraylist iterator

我有两个对象的Arraylists:

Node(int id, String name, double pValue)

Edge(String node1, String node2, String type)

但是为了向我的图表添加边缘,代码如下:

main.addEdge(Edge e, Node n1, Node n2)

因此,我正在使用一个交互器来添加边缘:

Iterator<Edge> eIt = edges.iterator();
   while(eIt.hasNext()){

     Node n1, n2;

     n1 = ?; //Code in question

     n2 = ?; //And here too

     mainGraph.addEdge(eIt.next(), n1, n2);
  }

如何将引用eIt.next().getNode1() / getNode2()与包含节点的ArrayList交叉,以便它返回具有匹配名称的对象Node?

1 个答案:

答案 0 :(得分:3)

根据您的数据结构的描述,您必须遍历整个Node列表以找到所请求名称的两个节点。

如果您维护一个HashMap<String,Node>,并通过其名称提供Node,则可以提高搜索效率。但是,这真的没必要。

相反,我建议您的Edge类保留对其两个Node的引用,而不是那些节点的名称。它不仅需要更少的存储空间,还可以防止需要按名称搜索节点。

将您的边缘更改为:

Edge(Node node1, Node node2, String type)

然后你的代码就像:

Iterator<Edge> eIt = edges.iterator();
 while(eIt.hasNext()){
    Edge e = eIt.next();
    mainGraph.addEdge(e, e.getNode1(), e.getNode2()); // actually, you can change
                                                      // addEdge to require just
                                                      // the Edge, since it already
                                                      // contains the Nodes
}