Java的LinkedHashSet向后迭代(Java LinkedHashSet backward

2019-06-24 18:18发布

我怎样才能通过的项目迭代LinkedHashSet从最后一个项目的第一个?

Answer 1:

如果你想继续使用集合,你可以使用以下命令:

LinkedHashSet<T> set = ...

LinkedList<T> list = new LinkedList<>(set);
Iterator<T> itr = list.descendingIterator();
while(itr.hasNext()) {
    T item = itr.next();
    // do something
}

如果你是罚款使用数组,那么你可以看看hvgotcodes的回答 。



Answer 2:

呃,假设你的意思LinkedHashSet ...

我会用指定者 ,只是使用反向for循环。

有可能是一个更好的方式来做到这一点,但是这应该工作。 toArray保证任何顺序被保存

如果这组作出任何保证,以什么责令其元素按其迭代器返回,这个方法必须返回相同的顺序的元素。

就像是

Set<MyType> mySet = new LinkedHashSet();
...
MyType[] asArray = mySet.toArray();

for (int i = asArray.length - 1; i>=0; i--){
..
}


Answer 3:

这是另一种方式:

LinkedHashSet<T> set = ...

List<T> list = new ArrayList<>(set);
Collections.reverse(list);

for( T item : list ){
   ...
}


Answer 4:

如果你真正的意思LinkedHashSet,你可以把元素融入到一个ArrayList,然后使用ArrayList的的ListIterator。

ListIterator<T> l = new ArrayList<T>(yourLinkedHashList).listIterator();
// ListIterator can iterate in reverse
while(l.hasPrevious()) {
    T obj = l.previous();
}


Answer 5:

根据JavaDoc:“此链接列表定义迭代排序,这是在其中元件被插入到该组(插入顺序)的顺序。”

所以,你可以简单地说:

LinkedHashSet<Integer> numbers = new LinkedHashSet<Integer>();
numbers.add(1);
numbers.add(2);
numbers.add(33);
numbers.add(44);
numbers.add(108);

for (Integer i : numbers) {
    System.out.println(i);
}


文章来源: Java LinkedHashSet backwards iteration