参照渡しに気をつけるべし
リストを使ってて,最大値とか,ベスト5とか出したいために一時的にリストをコピーして,そいつをソート書けるなんてことをやる.
たとえば下みたいに
1 | ArrayList dataList; //データ一覧 |
なんて書くと,tmpListは当然ソートされた状態になってるけど,実はこのとき元のdataListもソートされてしまってる…(汗)
つまり,4行目の代入は参照渡になるので,5行目でソートしたときは参照元(tmpList)だけでなく参照先(dataList)もソートされてしまうというわけ.ま,超初歩的と言ってしまえばそれまでだけど.
で,どーするかって話ですが,4行目を安直に
ArrayList tmpList = (ArrayList)dataList.clone();
って書き換えて対応してしまった.これであってるのかな?