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