Java LinkedHashSet 向后迭代

问题描述 投票:0回答:7

如何从最后一个项目到第一个项目迭代

LinkedHashSet
的项目?

java set iteration linkedhashset
7个回答
29
投票

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

LinkedHashSet<T> set = ...

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

如果您愿意使用数组,您可以看看 hvgotcodes' 答案


7
投票

这是另一种方式:

LinkedHashSet<T> set = ...

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

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

7
投票

呃,假设你指的是 LinkedHashSet...

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

可能有更好的方法来做到这一点,但这应该可行。

toArray
保证保留任何订单

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

类似的东西

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

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

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

2
投票

从 Java 21 开始,可以使用 reversed()

 上的 
LinkedHashSet
 方法。该集合的反向视图可用于以相反顺序迭代。

for (Object o : myLinkedHashSet.reversed()) {
  System.out.println(o);
}

0
投票

现在从 java 21 开始,您可以使用

reversed()
SequancedSet
方法来反转集合元素。

LinkedHashSet lhs=....
....
.....
SequencedSet sequencedSet=lhs.reversed();

-10
投票

来自 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);
}
© www.soinside.com 2019 - 2024. All rights reserved.