Java LinkedHashSet向后迭代

如何迭代LinkedHashSet的项目从最后一项到第一项?

如果要继续使用集合,可以使用以下内容:

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

如果你使用数组很好,你可以看看hvgotcodes的答案 。

呃,假设你的意思是LinkedHashSet ……

我会使用toArray并只使用反向循环。

可能有更好的方法,但这应该有效。 toArray保证保留任何订单

如果此set对其迭代器返回的元素的顺序做出任何保证,则此方法必须以相同的顺序返回元素。

就像是

 Set mySet = new LinkedHashSet(); ... MyType[] asArray = mySet.toArray(); for (int i = asArray.length - 1; i>=0; i--){ .. } 

这是另一种方式:

 LinkedHashSet set = ... List list = new ArrayList<>(set); Collections.reverse(list); for( T item : list ){ ... } 

如果您真的想要LinkedHashSet,可以将元素放入ArrayList中,然后使用ArrayList的ListIterator。

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

来自javadoc:“此链接列表定义了迭代顺序,即元素插入集合(插入顺序)的顺序。”

所以你可以简单地说:

 LinkedHashSet numbers = new LinkedHashSet(); numbers.add(1); numbers.add(2); numbers.add(33); numbers.add(44); numbers.add(108); for (Integer i : numbers) { System.out.println(i); }