のようなコレクションがある場合Collection<String> strs
、最初の項目を取り出すにはどうしたらよいでしょうか。 を呼び出してIterator
、その最初の を取得しnext()
、 を破棄するだけで済みますIterator
。これより無駄の少ない方法はありますか。
ベストアンサー1
それが最善の方法のようです:
String first = strs.iterator().next();
素晴らしい質問です... 最初はCollection
インターフェースの見落としのように思えます。
get(item)
「first」は必ずしもコレクションに入れた最初のものを返すわけではなく、順序付けされたコレクションに対してのみ意味があることに注意してください。順序が必ずしも保持されないため、呼び出しがないのはそのためかもしれません。
少し無駄に思えるかもしれませんが、思ったほど悪くはないかもしれません。Iterator
には、コレクション全体のコピーではなく、コレクションへのインデックス情報のみが含まれています。 このメソッドを呼び出すと、オブジェクトがインスタンス化されますIterator
が、それが唯一のオーバーヘッドです (すべての要素をコピーする場合とは異なります)。
たとえば、ArrayList<String>.iterator()
メソッドによって返される型を見ると、 であることがわかりますArrayList::Itr
。これは、リストの要素をコピーするのではなく、直接アクセスする内部クラスです。
実装によってはiterator()
、戻り値が空になる可能性があるため、必ず確認してください。null