collections framework beginners guide

27
Collections Framework Beginners guide HASUNUMA Kenji Vice president, GlassFish Users Group Japan [email protected] Twitter: @btnrouge

Upload: kenji-hasunuma

Post on 15-Jan-2015

9.921 views

Category:

Documents


0 download

DESCRIPTION

社内勉強会「Collections Frameworkビギナーズガイド」講義資料

TRANSCRIPT

Page 1: Collections Framework Beginners guide

Collections Framework Beginners guide

HASUNUMA KenjiVice president, GlassFish Users Group [email protected]: @btnrouge

Page 2: Collections Framework Beginners guide

Introduction

Page 3: Collections Framework Beginners guide

Collections Frameworkとは?

•主要なデータ構造をサポート

•基本的なアルゴリズムを実装•わかりやすく、拡張しやすい設計•主にjava.utilパッケージ

Page 4: Collections Framework Beginners guide

���

��������

�����������

�����������

�����

���

����

�������

������� !�

Page 5: Collections Framework Beginners guide

•Collection<E> - 値の集合

• Set<E> - 順不同、重複なし、順次のみ

• List<E> - 順序あり、重複あり、順次/直接

• Deque<E> - 順序あり、重複あり、順次のみ

•Map<K, V> - キーと値のペアの集合

Page 6: Collections Framework Beginners guide

Set<E> List<E> Deque<E> Map<K, V>

Hash Table

Resizable Array

Balanced Tree

Linked List

Hash Table+

Linked List

HashSet -- -- HashMap

-- ArrayList ArrayDeque --

TreeSet -- -- TreeMap

-- LinkedList LinkedList --

LinkedHashSet -- -- Linked

HashMap

Page 7: Collections Framework Beginners guide

Hash Table(ハッシュ表)

順次アクセス 遅いHash Table(ハッシュ表) 直接アクセス 非常に速い ※ハッシュ衝突に注意Hash Table(ハッシュ表)

挿入・削除 非常に速い ※ハッシュ衝突に注意

Resizable Array(可変配列)

順次アクセス 速い(サイズに依存)Resizable Array

(可変配列) 直接アクセス 速い(サイズに依存)Resizable Array(可変配列)

挿入・削除 遅い

Balanced Tree(ツリー構造)

順次アクセス 普通Balanced Tree

(ツリー構造) 直接アクセス 普通Balanced Tree(ツリー構造)

挿入・削除 速い(速度一定)

Linked List(連結リスト)

順次アクセス 速い(サイズに依存)Linked List(連結リスト) 直接アクセス 遅いLinked List(連結リスト)

挿入・削除 速い(サイズに依存)※1 ハッシュ衝突による性能劣化に注意すること

Page 8: Collections Framework Beginners guide

How to select the type

Page 9: Collections Framework Beginners guide

基本方針

1.基本となるデータ型を決める : String, Integer, BigDecimal, etc.

2.データ構造を決める : Set<E>, List<E>, Deque<E>, Map<K, V>

3.データ構造の実装を決める

Page 10: Collections Framework Beginners guide

例1 : Stringクラス、順不同、重複なし

1. 基本データ型→String

2. データ構造 : 順不同、重複なし→Set<String>

3. 実装 : 要件なし→HashSet<String>

Set<String> set = new HashSet<>();

Page 11: Collections Framework Beginners guide

例2 : int型、順序あり、直接アクセスあり

1. 基本データ型→Integer (ラッパー)

2. データ構造 : 順序あり、直接アクセスあり→List<Integer>

3. 実装 : 要件なし→ArrayList<Integer>

List<Integer> list = new ArrayList<>();

Page 12: Collections Framework Beginners guide

例3 : Integerクラス、順序あり、直接アクセスあり、挿入・削除が多い

1. 基本データ型→Integer

2. データ構造 : 順序あり、直接アクセスあり→List<Integer>

3. 実装 : 挿入・削除多い→LinkedList<Integer>

List<Integer> list = new LinkedList<>();

Page 13: Collections Framework Beginners guide

Basic operations

Page 14: Collections Framework Beginners guide

Collection<E>の主なメソッド

• boolean add(E e)

• void clear()

• boolean isEmpty()

• boolean remove(Object o)

• int size()

• <T> T toArray(T[] a)

Page 15: Collections Framework Beginners guide

List<E>の主な追加メソッド

• boolean add(int index, E element)

• E get(int index)

• int indexOf(Object o)

• int lastIndexOf(Object o)

• int remove(int index)

• E set(int index, E element)

Page 16: Collections Framework Beginners guide

Deque<E>の主な追加メソッド(キュー)

• boolean add(E e) [exception]

• void offer(E e)

• E poll()

• E element() [exception]

• E peek()

• E remove() [exception]

Page 17: Collections Framework Beginners guide

Deque<E>の主な追加メソッド(スタック)

• void push(E e)

• E pop()

• E peek()

Page 18: Collections Framework Beginners guide

Map<K, V>の主なメソッド

• void clear()

• boolean containsKey(Object key)

• V get(Object key)

• V put(K key, V value)

• V remove(Object key)

• int size()

Page 19: Collections Framework Beginners guide

基本アルゴリズム : Collections

• ソート (Listのみ)

• シャッフル (Listのみ)

• 反転・フィル・コピー・交換 (Listのみ)

• 二分探索 (Listのみ)

• 要素の出現頻度、最大、最小• 同期化、読み取り専用化

Page 20: Collections Framework Beginners guide

Collectionの繰り返し : 拡張for文

for (型 変数名 : コレクションor配列) 文;

• Collectionを順に参照する

• ListだけでなくSetやDequeにも適用可

Page 21: Collections Framework Beginners guide

// Example #1:// print any elements in the List// to upper case every lines.

List<String> list = new ArrayList<>();...for (String s : list) { // show elements (to upper case) System.out.println(s.toUpperCase());}

Page 22: Collections Framework Beginners guide

// Example #2:// print any elements in the Set// to upper case every lines.

Set<String> set = new HashSet<>();...for (String s : set) { // show elements (as upper case) System.out.println(s.toUpperCase());}

Page 23: Collections Framework Beginners guide

Attentions

Page 24: Collections Framework Beginners guide

Collections Frameworkと並列処理

•同期化されない(仕様)•同期化が必要な場合:• Collectionsクラスで同期化する

• Concurrency Utilitiesの同期化された実装を利用する(推奨)

Page 25: Collections Framework Beginners guide

古いデータ構造との関係

• Vector、Hashtable→現在はCollections Frameworkの一部:• Vector<E> … List<E>の実装

• Hashtable<K, V> … Map<K, V>の実装

•標準的な実装と異なる振る舞い•同期化される•要素にnullを設定できない

Page 26: Collections Framework Beginners guide

学習に役立つ情報

• Java開発者ガイド(英語)http://docs.oracle.com/javase/7/docs/technotes/guides/collections/

• Javaチュートリアル・第11章「Javaチュートリアル第4版」 ※Java SE 6用ピアソン・エデュケーションISBN978-4-89471-714-5

Page 27: Collections Framework Beginners guide

Collections Framework Beginners guide

HASUNUMA KenjiVice president, GlassFish Users Group Japan

[email protected]: @btnrouge