迭代器在树集中的迭代器中的起始点

时间:2015-11-03 09:26:13

标签: java iterator 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,因为它的插入和排序速度非常适合我的工作。我确实需要一个不使用Libary的解决方案。

你会如何解决这个问题?

1 个答案:

答案 0 :(得分:5)

您可以使用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  );
   } 
}