collections framework beginners guide

Post on 15-Jan-2015

9.921 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

Collections Framework Beginners guide

HASUNUMA KenjiVice president, GlassFish Users Group Japank.hasunuma@coppermine.jpTwitter: @btnrouge

Introduction

Collections Frameworkとは?

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

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

���

��������

�����������

�����������

�����

���

����

�������

������� !�

•Collection<E> - 値の集合

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

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

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

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

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

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 ハッシュ衝突による性能劣化に注意すること

How to select the type

基本方針

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

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

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

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

1. 基本データ型→String

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

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

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

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

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

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

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

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

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

1. 基本データ型→Integer

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

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

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

Basic operations

Collection<E>の主なメソッド

• boolean add(E e)

• void clear()

• boolean isEmpty()

• boolean remove(Object o)

• int size()

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

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)

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

• boolean add(E e) [exception]

• void offer(E e)

• E poll()

• E element() [exception]

• E peek()

• E remove() [exception]

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

• void push(E e)

• E pop()

• E peek()

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()

基本アルゴリズム : Collections

• ソート (Listのみ)

• シャッフル (Listのみ)

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

• 二分探索 (Listのみ)

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

Collectionの繰り返し : 拡張for文

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

• Collectionを順に参照する

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

// 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());}

// 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());}

Attentions

Collections Frameworkと並列処理

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

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

古いデータ構造との関係

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

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

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

学習に役立つ情報

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

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

Collections Framework Beginners guide

HASUNUMA KenjiVice president, GlassFish Users Group Japan

k.hasunuma@coppermine.jpTwitter: @btnrouge

top related