我有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的解决方案。
你会如何解决这个问题?
答案 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 );
}
}