配列に保存されているリストの最初のn個の要素を取得する最も速い方法は何ですか?
これをシナリオとして考えると:
int n = 10;
ArrayList<String> in = new ArrayList<>();
for(int i = 0; i < (n+10); i++)
in.add("foobar");
オプション1:
String[] out = new String[n];
for(int i = 0; i< n; i++)
out[i]=in.get(i);
オプション2:
String[] out = (String[]) (in.subList(0, n)).toArray();
オプション3:より速い方法はありますか?たぶん、Java8ストリームで?
オプション2は新しいList
参照を作成し、n
からList
要素配列を作成するためです(オプション1は出力配列のサイズを完全に調整します)。ただし、最初に1つのバグを修正する必要があります。 <
を使用します(<=
ではありません)。好む、
String[] out = new String[n];
for(int i = 0; i < n; i++) {
out[i] = in.get(i);
}
仮定、想定。推測:
リスト-リスト_<String>
_
Java 8 Streams、
リストから最初のN個の要素をリストに取得するには、
List<String> firstNElementsList = list.stream().limit(n).collect(Collectors.toList());
リストから最初のN個の要素を配列に取得するには、
String[] firstNElementsArray = list.stream().limit(n).collect(Collectors.toList()).toArray(new String[n]);
n
の大きさに大きく依存します。
_n==0
_の場合、オプション#1に勝るものはありません:)
Nが非常に大きい場合、toArray(new String[n])
は高速です。