- 420 名前:デフォルトの名無しさん [2008/11/27(木) 17:30:37 ]
- ある関数 List<String> hoge(List<String> list); を開発しています。
hoge() には、String を要素とする List が渡されてきます。 このとき、List が保持している String は重複しているかしていないか、わかりません。 この関数の中で、重複している要素は削除して、リストを返したいです。 (Set を返却値としたかったが、呼び出し元が List を要求していて、そこは修正できない) そこで以下のようなプログラムを書きました。 List<String> hoge(List<String> list) { Set<String> set = new HashSet<String>(list); List<String> resultList = new ArrayList<String>(set); return resultList; } このように一度 Set に入れなおすことで重複を自動的に削除し、 List に変換しています。 ○質問: Set や ArrayList に入れなおすとき、中の要素は コピーされて渡されるのか、参照渡しになるのでしょうか? HashSet や ArrayList のコンストラクタのソースを見ると、中で AbstractCollection#addAll(Collection) が呼ばれているようです。 その中では、渡された Collection を Iterator で回して 得られた要素を add しているので、参照渡しにしていると考えました。 hoge() 関数には大量(10万単位)の文字列が渡ってくるので、できれば OutOfMemory を起こしたくないため、参照渡しになってほしいです。
|

|