Java LinkedHashSet向后迭代

时间:2012-05-24 16:51:09

标签: java set iteration linkedhashset

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

5 个答案:

答案 0 :(得分:21)

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

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

答案 1 :(得分:7)

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

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

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

  

如果此集合对其元素的顺序做出任何保证   由它的迭代器返回,这个方法必须返回中的元素   同样的顺序。

这样的东西
Set<MyType> mySet = new LinkedHashSet();
...
MyType[] asArray = mySet.toArray();

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

答案 2 :(得分:5)

这是另一种方式:

LinkedHashSet<T> set = ...

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

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:-7)

来自javadoc:&#34;此链接列表定义迭代排序,即元素插入集合(插入顺序)的顺序。&#34;

所以你可以简单地说:

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