web-dev-qa-db-ja.com

Java LinkedHashSet後方反復

LinkedHashSetのアイテムを最後のアイテムから最初のアイテムまで繰り返すにはどうすればよいですか?

21
David Weng

コレクションを引き続き使用する場合は、次を使用できます。

LinkedHashSet<T> set = ...

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

代わりに配列を使用しても問題がない場合は、 hvgotcodesの回答 を参照してください。

23
Jeffrey

えーと、LinkedHashSetを意味すると仮定します。

toArray を使用し、逆のforループを使用します。

それを行うためのより良い方法があるかもしれませんが、それはうまくいくはずです。 toArrayは、すべての順序が保持されることを保証します

このセットが、その要素がイテレータによって返される順序について何らかの保証を行う場合、このメソッドは同じ順序で要素を返す必要があります。

何かのようなもの

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

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

これは別の方法です:

LinkedHashSet<T> set = ...

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

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

LinkedHashSetを本当に意味する場合は、要素をArrayListに入れてから、ArrayListのListIteratorを使用できます。

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