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

arc*_*rcs 4 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  );
    }

}
Run Code Online (Sandbox Code Playgroud)

我需要它,TreeSet因为它的插入和分类速度非常适合我的工作.我确实需要一个不使用Libary的解决方案.

你怎么解决这个问题?

Era*_*ran 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  );
    }

}
Run Code Online (Sandbox Code Playgroud)

正如OldCurmudgeon所提到的可以简化

for (Object element1 : tree) { 
   for (Object element2 : tree.tailSet(o, true)) { 
       System.out.println("Interact: " + element1 + " " + element2  );
   } 
}
Run Code Online (Sandbox Code Playgroud)

  • 用`for(Object o:tree){for(Object p:tree.tailSet(o,true)){}}可以大大简化` (4认同)