)2つのArrayListsを持っています。とBです。私はこの2つのArrayListsを組み合わせる必要があります。 ArrayList_ Bのすべての要素をArrayList_ Aに特定の場所に配置します。 ArrayList_ で1つのArrayListの要素を別のArrayListに特定の位置に追加する最も効率的な方法(
元素組成べきでは次のようになります。 a1b1a2b2a3b3 ....
しかし、私はできる限り、最も効率の方法でこれを行います。
ルール:ArrayList_ Bを作成し、変更しないでください。
ご覧のとおり、私の例で最も効率的な方法はMethod2です。しかし、それはまだ巨大なArrayListのために非常に遅いです。
どうすれば効率的な方法を提案してください。ありがとうございました:)
パブリッククラスソリューション{
public static void main(String[] args) {
Method1();
Method2();
Method3();
}
private static void Method3() {
ArrayList<Object> a = new ArrayList<>();
ArrayList<Object> b = new ArrayList<>();
for (int i = 0; i < Math.pow(2, 15); i++) {
a.add("a" + i);
}
for (int i = 0; i < Math.pow(2, 15); i++) {
b.add("b" + i);
}
ArrayList<Object> aa = new ArrayList<>(a);
a.ensureCapacity(2*aa.size());
a.clear();
long time1 = System.currentTimeMillis();
for (int i = 0; i<b.size();i++) {
a.add(aa.get(i));
a.add(b.get(i));
}
long time2 = System.currentTimeMillis();
System.out.println(time2 - time1);
}
private static void Method2() {
ArrayList<Object> a = new ArrayList<>();
ArrayList<Object> b = new ArrayList<>();
for (int i = 0; i < Math.pow(2, 15); i++) {
a.add("a" + i);
}
for (int i = 0; i < Math.pow(2, 15); i++) {
b.add("b" + i);
}
long time1 = System.currentTimeMillis();
int size = a.size();
a.add(b.get(0));
for (int i = 1; i < size; i++) {
a.add(a.get(i));
a.add(b.get(i));
}
a.subList(1, size).clear();
long time2 = System.currentTimeMillis();
System.out.println(time2 - time1);
}
private static void Method1() {
ArrayList<Object> a = new ArrayList<>();
ArrayList<Object> b = new ArrayList<>();
for (int i = 0; i < Math.pow(2, 15); i++) {
a.add("a" + i);
}
for (int i = 0; i < Math.pow(2, 15); i++) {
b.add("b" + i);
}
long time1 = System.currentTimeMillis();
a.add(1, b.get(0));
for (int i = 1; i < b.size(); i++) {
a.add((2 * i + 1), b.get(i));
}
long time2 = System.currentTimeMillis();
System.out.println(time2 - time1);
}
}
私はaのコピーを作成し、それをクリアしてもう一度ビルドします。容量を増やさずに最初から容量が正しいことを確認します。 'ensureCapacity(size * 2) 'を使うこともできます。コードがウォームアップされ、繰り返し実行され、そのコードをテストする最初の2秒間は無視されます。 –
「Math.pow(2,15)」が何回計算されるのだろうと思います。 – vitrums
ピーターローリー、あなたの助言に感謝、私はそれを手紙をしようとします。しかし、例えば、ArrayList *** A ***私はデフォルトのリストとArrayList *** B ***を入力パラメータとして持っています。新しいリストを作成せずに効率を上げるにはどうすればいいですか? – 2kich