java の collection 関連について整理してみました
DESCRIPTION
アップフロンティア・システム開発部スピーチ大会 YSK 氏の発表TRANSCRIPT
JavaのCollection関連について整理してみ
ました
14年2月5日水曜日
• javaって機能が多くて全ての機能を把握しきれていない...
• JavaでコーディングしているときはArrayListとHashMapだけ使ってればなんとかなると思っている...
動機
14年2月5日水曜日
Iterable<E>
Collection<E>
Set<E> Queue<E> List<E>
SortedSet<E>EnumSet<E>HashSet<E>
TreeSet<E>LinkedHashSet<E>
PriorityQueue<E>
ArrayList<E>LinkedList<E>
14年2月5日水曜日
• 重複した要素が含まれない
• 必ずしも特定の順序で保存されない
Set<E>
SortedSet<E>
• 要素がソートされたセット
14年2月5日水曜日
• ハッシュテーブルを使用して実装されたセット
• 要素の追加、削除、検索は高速
HashSet<E>
14年2月5日水曜日
• HashSet<E>の拡張
• 内容をイテレーションすると、要素が追加された順番で要素が返される
• 性能はHashSetより若干遅い
LinkedHashSet<E>
14年2月5日水曜日
• ツリー構造で内容を保持
• Comparatorインターフェースを指定する事により、任意の順序でソート可能
• 要素の追加、削除、検索はHashSetに比べて遅い
TreeSet<E>
14年2月5日水曜日
• 特定の順序で要素が並んでいるコレクション
List<E>
14年2月5日水曜日
• 最も広く使われているListクラス
• 最後の位置の要素の追加と削除、特定位置の要素の参照と変更、サイズの取得は高速
• それ以外の操作に要する時間はリストのサイズに比例して長くなる
ArrayList<E>
14年2月5日水曜日
• 双方向リンクリストであり、パフォーマンスの特性はArrayListのほぼ逆
• 要素の追加、削除は高速
• 要素の参照に要する時間はリストのサイズに比例する
LinkedList<E>
14年2月5日水曜日
• 要素に暗黙の順序を持つコレクションQueue<E>
14年2月5日水曜日
• 優先順位に基づいたキューで、キューの先頭はキュー内の最小要素
• 優先順位は要素の自然な順序、もしくは提供されたComparatorにより決定
• イテレーターによる要素の走査では、優先順位に基づいてソートされないので注意
PriorityQueue<E>
14年2月5日水曜日
Map<K,V>
SortedMap<K,V>
TreeMap<K,V>
EnumMap<K,V>
WeakHashMap<K,V>
HashMap<K,V>
LinkedHashMap<K,V>
14年2月5日水曜日
• キーに関連づけて一つの要素を保存Map<K,V>
SortedMap<K,V>
• キーがソートされたマップ
14年2月5日水曜日
• ハッシュテーブルを使用して実装されたMap
• 検索と挿入に比較的時間を要さない
HashMap<K,V>
14年2月5日水曜日
• HashMapの拡張
• 内容をイテレーションすると、要素が追加された順番で要素が返される
• 性能はHashMapより多少遅い
LinkedHashMap<K,V>
14年2月5日水曜日
• ほぼHashMapのように振る舞う
• キーを参照するのに弱参照(WeakReference)を使用する
• キーにあたるオブジェクトの強参照がなくなると、マップ内からそのキーと値が削除される
WeakHashMap<K,V>
14年2月5日水曜日
• SortedMapを使用し、TreeSetと同じ方法でキーをソートする
• キーと値の組を追加、削除、検索するのはHashMapに比べて遅い
TreeMap<K,V>
14年2月5日水曜日
Collentionsクラス
• コレクションに対して操作するstaticのユーティリティメソッドを提供
• 最大値、最小値の探索、ソート、スワップ、シャッフル、要素の出現回数、etc...
14年2月5日水曜日
まとめ
• 使用用途に応じて正しいクラスを使用すべき
• 自力実装ではなくユーティリティ系も使用して不要なバグを防ぐ
14年2月5日水曜日