0

この{1,2,3,4,5,6,7,8}のようなリストがあるとしましょう。2つのリスト(1つは前半、もう1つは後半)をすばやく作成する方法はありますか?分割の場所は常にリストの半分のサイズです(リストは常に偶数です)

現在の私のアプローチは、サイズを2で割ってから、リストを繰り返し、list1の値より下の値とlist2の値より上の値を追加することです。もっと速い方法があるかどうか疑問に思っていました(これらのうち10億以上を実行する必要があるため、パフォーマンスがわずかに向上しただけでも、時間を大幅に節約できます)。

4

2 に答える 2

4

組み込み機能に関しては、次を使用できますList#subList(int, int)

int size = original.size();
List<Integer> first = original.subList(0, size / 2);
List<Integer> second = original.subList(size / 2, size);

使用するかどうかはsubList()、コンテンツで何をしているかによって異なります。subList()ビューを(実際にコピーするのではなく)元のリストに戻します。必ずjavadocを読んでください。スニペットは次のとおりです。

指定されたfromIndex(包括的)とtoIndex(排他的)の間のこのリストの部分のビューを返します。(fromIndexとtoIndexが等しい場合、返されるリストは空です。)返されるリストはこのリストに基づいているため、返されるリストの非構造的な変更はこのリストに反映され、その逆も同様です。返されるリストは、このリストでサポートされているすべてのオプションのリスト操作をサポートします。

subList()また、私は実際にパフォーマンスについて、そしてそれがあなたの要件をどのように満たすかどうかについて話すことができません。ビューを作成するだけで、コピーするのではないので、比較的高速になると思います。しかし、繰り返しになりますが、かなり状況に応じて、どちらかの方法でプロファイルを作成する必要があります。

于 2012-04-29T22:39:53.553 に答える
0

わかりました、あなたは10億以上のこれらをしなければなりません-楽しいです。

さまざまな方法をプロファイリングする必要があります。

私の賭けは、配列とSystem.arraycopy

コードがリストを生成するコードでない場合Listは、提供されている実装によって異なります。

要件に関する詳細を提供している場合は、より適切な回答が得られます。コピーが必要であるか、ビューです(subList()十分に提供されているように)。どの実装をList使用しているか、提供されているかなど。速度もjvm(バージョンとプラットフォーム)の影響を受けます。

于 2012-04-29T22:42:17.237 に答える