26

LinkedHashSet最後のアイテムから最初のアイテムまでアイテムを反復処理するにはどうすればよいですか?

4

5 に答える 5

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 の answerをご覧ください。

于 2012-05-24T16:58:21.820 に答える
7

ええと、LinkedHashSet を意味すると仮定すると...

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

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

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

何かのようなもの

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

for (int i = asArray.length - 1; i>=0; i--){
..
}
于 2012-05-24T16:53:52.393 に答える
7

これは別の方法です:

LinkedHashSet<T> set = ...

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

for( T item : list ){
   ...
}
于 2012-05-24T17:01:58.613 に答える
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();
}
于 2012-05-24T17:07:19.897 に答える
-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);
}
于 2012-05-24T16:57:25.317 に答える