【发布时间】:2013-07-22 07:22:57
【问题描述】:
我有以下节点类
Class Node {
private int id;
public int getId() {
return this.id;
}
}
然后用节点创建一个 TreeSet。接下来我想根据 id 匹配找到并返回一个 Node 对象。但是,每次 findNode() 函数都返回下一个节点而不是下一个节点。我知道这是因为调用了 iterator.next() 两次。如何只调用一次以检查 id 值并返回对象引用。我也尝试过创建一个临时对象引用,但结果还是一样。
Class NodeSet {
Set<Node> set = new TreeSet<Node>();
public Node findNode(int id) {
Iterator<Node> iterator = set.iterator();
while(iterator.hasNext()) {
if(iterator.next().getId() == id)
return iterator.next();
}
return null;
}
}
【问题讨论】:
-
为什么不使用 Map 而不是迭代?
-
@JBNizet: 可以举个例子多解释一下吗?
-
创建一个
Map<Integer, Node>,其中包含 ID 作为键,对应的节点作为值。当您需要具有给定 ID 的节点时,请致电Node theNode = map.get(id)。 -
@JBNizet,您的建议与 TreeSet 的使用无关。 Map 和 Set 是两个完全不同的集合。
-
@Reddy:你不认为我知道吗? OP 希望通过 ID 获取节点。这就是我建议使用 Map 的原因:它是这个用例的正确数据结构。
标签: java