Windowsフォームアプリケーション用に少し前に書かれたコードを修正するように頼まれました。プログラマーはArrayList
頻繁に使用しています。ジェネリックリストは配列リストに比べてはるかに効率的だと思いますList<T>
。また、検討する価値のある他の選択肢があるかどうかを知りたかったので、コードを書き直す予定です。私は.net2.0で作業しています
3 に答える
.NET 2で作業している場合は、.NET 4の並行コレクションを使用できません。これは、「 。List<T>
に少し似ているコレクション」という点でほとんど残っています(並行コレクション内でも)。ArrayList
コレクションには、すぐに相当するものはありません。とにかく同時アクセスが実際に予想される場合にのみ、同時コレクションを使用する必要があります。)
Stack<T>
と、、そして-がありQueue<T>
ますLinkedList<T>
が、それらはすべて、それらをArrayList
使用して何ができるかという点で多少異なります。もちろん、ランダムアクセスが必要ない場合は検討する価値があります。
現在、で多くの大きな値型をボックス化していない限り、効率の点でこれ以上期待することはありませんArrayList
。期待できるのは、はるかに明確なコードです。キャストが少なく、コレクションの内容に関する不確実性が少ないなど。
近い将来に.NET3.5にアップグレードするオプションがある場合は、LINQにアクセスできるようになります。これは、コレクションを処理するときに非常に便利です。新しいコレクションタイプは比較的少ないですが、それらに対する操作を表現するためのはるかに簡単な方法です。
アップデート:
頭/尾に追加/削除するには、を使用することをお勧めしLinkedList<T>
ますが、収集の正確な最大容量を決定でき、サイズが容量に近い場合は、使用する方が良い場合がありますQueue<T>
(内部的には配列であり、サイズが容量に達したときに再割り当てされるため) )。キューを使用すると、LinkedListノードに伴うメモリオーバーヘッドは発生しません。
原文:
MSDNから:パフォーマンスに関する考慮事項The List<T> class is the generic equivalent of the ArrayList class.
のセクション
を注意深くお読みください。ArrayListの使用方法に応じて、何を使用する必要がありますか?それはランダムアクセスですか、それとも頭/尾に追加/削除しますか?List<T>
SortedListとCollectionを試してください。どちらも.NETFramework2.0でサポートされています