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

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

你会如何解决这个问题?

最佳答案

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

关于java - 在树集中的迭代器中具有起点的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33495467/

相关文章:

java - 从 EJB 计时器中删除大量行

java - 如何使用 Java 在 selenium WebDriver 中按 CTRL+T 和 CTRL+TAB?

java - 什么是 Java 中的故障安全和故障快速迭代器

java - 为什么使用\0 将 highEndPoint 作为子列表的一部分

java - 与集合相等和可比较

java - 使用 Java Prettify 实现 Android 应用语法高亮显示

java - 是否可以使用分形来计算软件的复杂性?

c++ - 迭代器不会遍历整个 map

iterator - 错误 : cannot infer an appropriate lifetime for autoref due to conflicting requirements [E0495]

java - 在 Java 1.7 中第一次对 TreeSet 进行 add 调用时触发了compareTo