我编写了一个自定义迭代器类,它迭代在 PoSet 中找到的一组数字,这是我的代码:
private class IntGenerator implements Iterator {
private Iterator<Integer> i;
private Set<Integer> returnedNumbers;
public IntGenerator () {
returnedNumbers = new HashSet<Integer> ();
i = S.iterator();
}
public boolean hasNext() {
return i.hasNext();
}
public Object next() {
int n = i.next();
for (Pair p : R) {
if (isInSecondElmPair(p, n)) {
if (returnedNumbers.contains(p.getFirstElm())) {
returnedNumbers.add(n);
return n;
}else{
returnedNumbers.add(p.getFirstElm());
return p.getFirstElm();
}
}else if (isInFirstElmPair(p, n)){
returnedNumbers.add(n);
return n;
}
}
return n;
}
public void remove() {
throw new UnsupportedOperationException();
}
}
问题是在返回一个数字时,我应该遵守偏序规则,即: 1. 如果 (x, y) 属于R
,那么 x 应该在 y 之前返回
但是,上面的代码似乎遵循该顺序,但它正在创建重复项,如何修复我的代码以不允许它?
注意:在我的代码中,S 是 PoSet 中的一组数字,它是一个 HashSet,R 是一个配对数组列表(配对:我创建的一个以 2 个整数作为参数的类)来保存 PoSet 中的关系。
有没有办法解决这个问题?谢谢