私はmergesortアルゴリズムのために奇妙なランニングタイムを取得しています...同じ置換されたArrayListでアルゴリズム(1000回)を実行したいと思います。今、私はちょうどサイズ1000のArrayListの配列を作成し、これらのそれぞれをソートするのにかかる時間をとってから、時間の平均を取っています。同一の参照項目を複数回配列に格納すると、その参照項目がすべて変更に影響しますか?
私の質問は、同じリストを何度も何度もソートしていますか?配列のArrayListのインスタンスをインデックス0で変更すると、配列内の他のArrayListは同じ状態を維持しますか?私はそう思うだろうが、私はそれが起こっていないことを確認したいですか?ありがとう。
for (int N = 1000; N <= 10000; N += 1000) {
//copy the array
@SuppressWarnings("unchecked")
ArrayList<Integer>[] container = (ArrayList<Integer>[])new ArrayList[N];
ArrayList<Integer> testArray1 = generatePermutedOrder(N);
for(int j=0; j<timesToLoop; j++){
container[j] = testArray1;
}
System.out.print(N + "\t");
// let things stabilize
startTime = System.nanoTime();
while (System.nanoTime() - startTime < 1000000000)
;
// time the routine
startTime = System.nanoTime();
for (int i = 0; i < timesToLoop; i++) {
mergesort(container[i]);
}
はい同じArrayListオブジェクト(1つの 'new ArrayList()')を使用している場合、すべての操作は同じオブジェクトに対して行われます。幸いにもコピーを取ることは単純です - コンストラクタ/ addAll。 –