Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在树集中的迭代器中具有起点的迭代器_Java_Iterator_Treeset - Fatal编程技术网

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

Java 在树集中的迭代器中具有起点的迭代器,java,iterator,treeset,Java,Iterator,Treeset,我有一个TreeSet并对其进行迭代。在遍历它时,我必须将每个元素与此树集合中的其余条目进行比较 问题是我不能有一个从特定点开始的迭代器 TreeSet<Object> tree = new TreeSet<>(); Iterator<Object> i1= tree.iterator(); while (i1.hasNext()) { element1 = i1.next(); ListIterator<String> i2

我有一个
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 tree=newtreeset();
迭代器i1=tree.Iterator();
while(i1.hasNext()){
element1=i1.next();
ListIterator i2=//从“i1”开始
while(i2.hasNext()){
element2=i2.next();
System.out.println(“交互:“+element1+”“+element2”);
}
}
我需要
TreeSet
,因为它的插入和排序速度非常适合我的工作。我确实需要一个不使用图书馆的解决方案

如何解决此问题?

您可以使用
尾集(E fromElement,包含布尔值)
从所需元素开始获取一个子集,然后在该子集上迭代

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

}

不要使用迭代器,请根据树集大小使用增强for循环或两个for循环。不过,复杂性将受到冲击。您还可以尝试将集合转换为array()并使用该数组。树集包含大约10^5个条目,但它们在填充时不会更改。我会尝试转换它,还没有考虑过。可以通过
for(Object o:tree){for(Object p:tree.tailSet(o,true)){}}大大简化此操作。{code>此复制树集的一部分或其他内容会不会增加此操作的成本?树集包含大约10^5个entires,我必须做很多。@Omix22根据Javadoc,
tailSet
返回此集合中元素大于(或等于,如果包含为真)fromElement的部分的视图。返回的集合由该集合支持
。这意味着它不会创建原始集的副本。
for (Object element1 : tree) { 
   for (Object element2 : tree.tailSet(o, true)) { 
       System.out.println("Interact: " + element1 + " " + element2  );
   } 
}