获取 TreeSet 中所有可能的元素对
Get all possible pairs of elements in a TreeSet
假设我有一个对象 x 的 TreeSet。我想要做的是遍历所有对象并获得所有可能的对。至此,我来到了下面的代码
TreeSet<x> ts = new TreeSet<>();
ts.add(new x(3, true));
ts.add(new x(1, true));
ts.add(new x(2, true));
ts.add(new x(5, true));
ts.add(new x(4, true));
Iterator<x> iterator = setOfX.iterator();
while (iterator.hasNext()) {
System.out.println("ID:"+iterator.next());
Iterator<x> innerIterator = setOfX.tailSet(iterator.next(), true).iterator();
while (innerIterator.hasNext()) {
int id = innerIterator.next().id;
System.out.println(id);
}
}
但输出似乎对某些组合很幸运,而且它异常退出
ID:1:true
2
3
4
5
ID:3:true
4
5
ID:5:true
Exception in thread "main" java.util.NoSuchElementException
你能指出任何解决方案吗?
问题是您调用了两次 iterator.next()
。请注意,此方法不仅获取迭代器当前指向的内容,还将迭代器前进到下一个元素。每次迭代仅调用 iterator.next()
一次并将其 return 值存储在变量中:
TreeSet<x> ts = new TreeSet<>();
ts.add(new x(3, true));
ts.add(new x(1, true));
ts.add(new x(2, true));
ts.add(new x(5, true));
ts.add(new x(4, true));
Iterator<x> iterator = setOfX.iterator();
while (iterator.hasNext()) {
// Call iterator.next() only once per iteration
x value = iterator.next();
System.out.println("ID:"+value);
Iterator<x> innerIterator = setOfX.tailSet(value, true).iterator();
while (innerIterator.hasNext()) {
int id = innerIterator.next().id;
System.out.println(id);
}
}
您正在执行 iterator.next() 两次。创建 innerIterator 时一个在 sysout 另一个里面。
System.out.println("ID:"+iterator.next());
Iterator<x> innerIterator = setOfX.tailSet(iterator.next(),true).iterator();
每次调用 iterator.hasNext() 使用 next() 一次,你不会有异常。
假设我有一个对象 x 的 TreeSet。我想要做的是遍历所有对象并获得所有可能的对。至此,我来到了下面的代码
TreeSet<x> ts = new TreeSet<>();
ts.add(new x(3, true));
ts.add(new x(1, true));
ts.add(new x(2, true));
ts.add(new x(5, true));
ts.add(new x(4, true));
Iterator<x> iterator = setOfX.iterator();
while (iterator.hasNext()) {
System.out.println("ID:"+iterator.next());
Iterator<x> innerIterator = setOfX.tailSet(iterator.next(), true).iterator();
while (innerIterator.hasNext()) {
int id = innerIterator.next().id;
System.out.println(id);
}
}
但输出似乎对某些组合很幸运,而且它异常退出
ID:1:true
2
3
4
5
ID:3:true
4
5
ID:5:true
Exception in thread "main" java.util.NoSuchElementException
你能指出任何解决方案吗?
问题是您调用了两次 iterator.next()
。请注意,此方法不仅获取迭代器当前指向的内容,还将迭代器前进到下一个元素。每次迭代仅调用 iterator.next()
一次并将其 return 值存储在变量中:
TreeSet<x> ts = new TreeSet<>();
ts.add(new x(3, true));
ts.add(new x(1, true));
ts.add(new x(2, true));
ts.add(new x(5, true));
ts.add(new x(4, true));
Iterator<x> iterator = setOfX.iterator();
while (iterator.hasNext()) {
// Call iterator.next() only once per iteration
x value = iterator.next();
System.out.println("ID:"+value);
Iterator<x> innerIterator = setOfX.tailSet(value, true).iterator();
while (innerIterator.hasNext()) {
int id = innerIterator.next().id;
System.out.println(id);
}
}
您正在执行 iterator.next() 两次。创建 innerIterator 时一个在 sysout 另一个里面。
System.out.println("ID:"+iterator.next());
Iterator<x> innerIterator = setOfX.tailSet(iterator.next(),true).iterator();
每次调用 iterator.hasNext() 使用 next() 一次,你不会有异常。