在树集中的迭代器中具有起点的迭代器

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  );
   } 
}