4

重複の可能性:
インデックスによって Collection から値を取得する最良の方法

私が持っているとしましょうCollection。そして、インデックス 2 の要素を取得する必要があります。

get メソッドがなく、反復子がインデックスを追跡しない場合、どうすればよいでしょうか?

4

1 に答える 1

12

何よりもまず、実際の実装を活用してみてください。Listダウンキャストしてより良い API を使用できる場合:

if(collection instanceof List) {
  ((List<Foo>)collection).get(1);
}

しかし、「純粋な」解決策は、 を作成して2 回Iterator呼び出すことです。next()それはあなたが持っている唯一の一般的なインターフェースです:

Iterator<Foo> fooIter = collection.iterator();
fooIter.next();
Foo second = fooIter.next();

これは、k 番目の要素に簡単に一般化できます。しかし、気にしないでください。そのための方法がすでにあります。Iterators.html#get(Iterator, int)グアバでは:

Iterators.get(collection.iterator(), 1);

...または次の場合Iterables.html#get(Iterable, int):

Iterables.get(collection, 1);

これを何度も行う必要がある場合は、 でコレクションのコピーを作成する方が安価な場合がありますArrayList

ArrayList<Foo> copy = new ArrayList<Foo>(collection);
copy.get(1); //second
于 2012-12-03T21:03:57.770 に答える