在树集中的迭代器中具有起点的迭代器
Iterator with starting point in iterator within treeset
我有一个 TreeSet
并遍历它。遍历它时,我必须将每个元素与此 TreeSet
.
中的其余条目进行比较
问题是我没有从特定点开始的迭代器。
TreeSet<Object> tree = new TreeSet<>();
Iterator<Object> i1= tree.iterator();
while (i1.hasNext()) {
element1 = i1.next();
ListIterator<String> i2 = // start at the point from 'i1'
while (i2.hasNext()) {
element2 = i2.next();
System.out.println("Interact: " + element1 + " " + element2 );
}
}
我需要 TreeSet
因为它的插入和排序速度非常适合我的工作。我确实需要一个不使用库的解决方案。
你会如何解决这个问题?
您可以使用 tailSet(E fromElement, boolean inclusive)
获取从所需元素开始的子集,然后迭代该子集。
Iterator<Object> i1= tree.iterator();
while (i1.hasNext()) {
element1 = i1.next();
Iterator<Object> i2 = tree.tailSet(element1,true).iterator();
while (i2.hasNext()) {
element2 = i2.next();
System.out.println("Interact: " + element1 + " " + element2 );
}
}
正如 OldCurmudgeon 提到的那样,可以用
来简化
for (Object element1 : tree) {
for (Object element2 : tree.tailSet(o, true)) {
System.out.println("Interact: " + element1 + " " + element2 );
}
}
我有一个 TreeSet
并遍历它。遍历它时,我必须将每个元素与此 TreeSet
.
问题是我没有从特定点开始的迭代器。
TreeSet<Object> tree = new TreeSet<>();
Iterator<Object> i1= tree.iterator();
while (i1.hasNext()) {
element1 = i1.next();
ListIterator<String> i2 = // start at the point from 'i1'
while (i2.hasNext()) {
element2 = i2.next();
System.out.println("Interact: " + element1 + " " + element2 );
}
}
我需要 TreeSet
因为它的插入和排序速度非常适合我的工作。我确实需要一个不使用库的解决方案。
你会如何解决这个问题?
您可以使用 tailSet(E fromElement, boolean inclusive)
获取从所需元素开始的子集,然后迭代该子集。
Iterator<Object> i1= tree.iterator();
while (i1.hasNext()) {
element1 = i1.next();
Iterator<Object> i2 = tree.tailSet(element1,true).iterator();
while (i2.hasNext()) {
element2 = i2.next();
System.out.println("Interact: " + element1 + " " + element2 );
}
}
正如 OldCurmudgeon 提到的那样,可以用
来简化for (Object element1 : tree) {
for (Object element2 : tree.tailSet(o, true)) {
System.out.println("Interact: " + element1 + " " + element2 );
}
}