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