我有两个对象的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?
答案 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
}