概要
「Java SE 11 Programmer II (1Z0-816-JPN) 試験」の出題範囲「コレクションとジェネリクス」の自己学習メモになります
ラッパークラスとBoxing/Unboxing
ラッパークラス
基本データ型の値を参照型として扱う専用のクラスをラッパークラスと呼びます
Boxing/Unboxing
double d1 = 10; // OK 基本データ型暗黙の型変換
Double d2 = 10; // NG コンパイルエラー
Long lval1 = null;
long 1val2 = lval1; // NG NullPointerException
Long lval3 = null;
lval3++; // NG NullPointerException
Map<String, Long> map = new HashMap<>();
long lval4 = map.get("H10"); // NG NullPointerException
コレクション
コレクションの種類と特徴
各インタフェースの特徴
インタフェース名 |
説明 |
List |
データ項目に順序ずけをしたコレクション |
Set |
ユニークな値のコレクションであり、順不同で要素を管理する |
Queue |
FIFO形式のデータ入出力を行うコレクション |
Map |
個々のキーに対応する値をマッピングしたオブジェクトで、1つのキーには値が割り当てられる |
Collectionインタフェースの主なメソッド
メソッド名 |
説明 |
boolean add(E e) |
引数の要素をコレクションに追加する、この呼び出しの結果、コレクションが変更された場合は、trueを返す |
void clear() |
このコレクションからすべての要素を削除する |
boolean contains(Object obj) |
指定された要素がこのコレクション内に存在する場合はtrueを返す |
boolean containsAll(Collection<?> c) |
指定されたコレクションが要素がすべてこのコレクションに含まれている場合はtrueを返す |
boolean isEmpty() |
このコレクションに要素が1つも含まれていない場合はtrueを返す |
boolean remove(Object obj) |
引数に指定された要素を削除し、要素が削除された場合はtrueを返す |
boolean removeAll(Collector<?> c) |
引数に指定されたコレクションにあるすべての要素をこのコレクションから削除し、このメソッドの呼び出しの結果、このコレクションの内容に変化があった場合はtrueを返す |
iterator<E> iterator() |
このコレクションの要素に対する反複子を返す |
Object[] toArray() |
このコレクションの要素が全て格納されている配列を返す |
T[] toArray(T[] array) |
このコレクションのすべての要素を含む配列を返す |
int size() |
コレクション内の要素数を返す |
Mapインターフェースの主なメソッド
メソッド名 |
説明 |
clear() |
マップ中のすべてのマッピングを削除する |
boolean containsKey(Object obj) |
指定されたキーに対応するキー値ペアがこのマップに存在する場合はtrueを返す |
boolean containsValue(Object obj) |
指定された値に対応するキー値ペアがこのマップに存在する場合はtrueを返す |
V get(Object obj) |
指定されたキーに対応する値を返す |
boolean isEmpty() |
このマップ中にマッピングを保持していない場合はtrueを返す |
V put(K key, V Value) |
指定されたキー値ペアを格納する。指定されたキーに対してすでに値が割当られている場合は、新しい値で上書きされる |
void putAll(Map<? extends K, extends V> m) |
指定されたマップにあるすべてのキー値ペアをこのマップに格納する |
V remove(Object obj) |
指定されたキーに対応するキー値ペアが存在する場合、それを削除する。戻り値をしては、指定キーに割り当てられていた値を返し、値が存在しない場合はnullを返す |
int size() |
このマップ中に存在するキー値ペアの数を返す |
Collection <V> values() |
このマップ中の値をコレクションとして返す |
List、Set、Queue、Mapの利用
List
クラス名 |
説明 |
ArrayList |
サイズ変更可能な配列。ランダムアクセスは高速だが、挿入と削除は低速である。同期性はサポートしていない |
LinkedList |
挿入と削除がArrayListより高速である。同期性はサポートしていない |
Vetor |
ArrayListと同様だが、同期性をサポートしている |
Set
クラス名 |
説明 |
HashSet |
データ項目へのアクセスはTreeSetよりも高速であるが、データ項目を順序ずけることはできない。同期性をサポートしていない |
TreeSet |
SortedSertインターフェースの実装クラスである。ソートされたデータ項目を得られるが、アクセス速度はHashSetよりも低速である。同期性をサポートしていない |
LinkedHashSet |
HashSetと同等の機能に加えて、すべてのデータ項目に対する二重リンクリストを追加したものである。同期性をサポートしていない |
イテレーターの利用
イテレーターオブジェクトの取得用メソッド
メソッド名 |
説明 |
iterator<E> iterator() |
このコレクションの要素に対する反復子を返す |
Iteratorインターフェースのメソッド
メソッド名 |
説明 |
boolean hasNext() |
次の要素がある場合はtrueを返す |
E next() |
次の要素を返す |
default void remove() |
next()の呼び出しごとに1回だけ呼び出すことができ、イテレータによって最後に返された要素を削除する |
Queue
Queueインターフェースの主なメソッド
操作 |
メソッド名 |
説明 |
挿入 |
boolean add(E e) |
要素が追加された場合はtrue、要素が追加できない場合はllegalStateException |
挿入 |
boolean offer(E e) |
要素が追加された場合はtrue、それ以外の場合はfalse |
削除 |
E remove() |
キューの先頭を取得および削除する。このキューが空の場合はNotSuchElementExceptionをスロー |
削除 |
E poll() |
キューの先頭を取得および削除する。このキューが空の場合はnull |
検査 |
E element() |
キューの先頭を取得するが削除しない。このキューが空の場合はNotSuchElementExceptionをスロー |
検査 |
E peek() |
キューの先頭を取得するが削除しない。このキューが空の場合はnull |
Dequeインターフェースの主なメソッド
操作 |
メソッド名 |
説明 |
挿入(例外スロー) |
void addFirst(E e) |
指定された要素を先頭に挿入する |
挿入(特殊な値) |
boolean offerFirst(E e) |
指定された要素を先頭に挿入する |
挿入(例外スロー) |
void addLast(E e) |
指定された要素を末尾に挿入する |
挿入(特殊な値) |
boolean offerLast(E e) |
指定された要素を末尾に挿入する |
削除(例外スロー) |
E removeFirst() |
キューの先頭を削除する |
削除(特殊な値) |
E pollFirst() |
キューの先頭を削除する |
削除(例外スロー) |
E removeLast() |
キューの末尾を削除する |
削除(特殊な値) |
E pollLast() |
キューの末尾を削除する |
検査(例外スロー) |
E elementFirst() |
キューの先頭を取得するが削除しない |
検査(特殊な値) |
E peekFirst() |
キューの先頭を取得するが削除しない |
検査(例外スロー) |
E elementLast() |
キューの末尾を取得するが削除しない |
検査(特殊な値) |
E peekLast() |
キューの末尾を取得するが削除しない |
スタックメソッドとDequeメソッドの比較
スタックメソッド |
Dequeメソッド |
void push(E e) |
void addFirst(E e) |
E pop() |
E removeFirst() |
E peek() |
E getFirst() |
Map
Mapインターフェースの主な実装クラス
クラス名 |
説明 |
hashMap |
マップ内に各々のキーと値をペアは順不同で格納される。また、nullをキーあるいは値として使用できる。同期性はサポートしていない |
LinkedHashMap |
すべてのエントリに対する二重リンクリストを保持するという点でHashMapと異なっている。同期性はサポートしていない |
TreeMap |
キー昇順による順序ずけが維持される。同期性はサポートしていない |
従来型とジェネリクス型
ジェネリクスとは
クラス定義などで汎用的に型を示しておき、利用時に目的のオブジェクトの型を当てはめられます
従来型のサンプルコード
ArrayList list = new ArrayList();
Integer val1 = 1;
int val2 = 2;
Integer val3 = val1;
list.add(val1);
list.add(val2);
list.add(val3);
// list.add("ABC");
System.out.println("size : " + list.size());
for (int = 0; i < list.size(); i++) {
// Integer obj = list.get(i); // NG
Integer obj = (Integer)list.get(i); // OK
System.out.println(obj + " ");
}
ジェネリクス対応のコレクションの場合
コレクション生成する際に、格納する要素のデータ型を指定する
ArrayList<String> list = new ArrayList<String>(); // OK
ArrayList<Object> list = new ArrayList<String>(); // NG
ArrayList<String> list = new ArrayList<Object>(); // NG
ダイヤモンド演算子
ArrayList<String> list = new ArrayList<String>(); // OK
ArrayList<String> list = new ArrayList<>(); // OK
ジェネリクスを用いた独自クラスの定義
- クラス定義およびインターフェース定義で使用
- メソッド定義で使用
- コンストラクタ定義で使用
class クラス名 <型パラメータリスト> {
private 型パラメータ 変数名; // インスタンス変数
public コンストラクタ名(型パラメータ 引数名) { } // コンストラクタ
public 型パラメータ メソッド名(型パラメータ 引数名) // メソッド
}
ジェネリクスを用いたメソッド定義
構文
[修飾子] <型パラメータリスト> 戻り値の型 メソッド名(データ型 引数) { }
ジェネリクスを用いたインターフェース宣言
継承を使用したジェネリクス
構文
<型パラメータ extends データ型>
ワイルドカードを使用したジェネリクス
構文
<? extends タイプ>
extendsキーワードを指定しているため、タイプに指定したデータ型やそのサブクラス(またはそのサブインターフェース)に対応する
<? super タイプ>
superキーワードを指定しているため、タイプに指定したデータ型やそのスーパークラス(またはそのスーパーインターフェース)に対応する
オブジェクトの順序付け
ComparableインターフェースとComparatorインターフェース
Comparableインターフェースの利用
構文
public int comparaTo(T o)
比較ルール
操作 |
戻り値 |
説明 |
自オブジェクト == 比較対象オブジェクト |
0 |
自オブジェクトが保持する値と比較対象オブジェクトの値が同じ |
自オブジェクト < 比較対象オブジェクト |
負の数 |
自オブジェクトが保持する値が、比較対象オブジェクトより小さい |
自オブジェクト > 比較対象オブジェクト |
正の数 |
自オブジェクトが保持する値が、比較対象オブジェクトより大きい |
Comparatorインターフェースの利用
構文
public int compara(T o1, T o2)
クラス名 |
説明 |
static <T extends Comparable<? super T>> Comparator<T> naturalOrder() |
自然順序で比較するとComparatorを返す。nullを比較した場合はNullPointExceptionをスロー |
static <T extends Comparable<? super T>> Comparator<T> reverseOrder() |
自然順序の逆で比較するComparatorを返す。nullを比較した場合はNullPointExceptionをスロー |
static <T extends Comparable<T> nullFirst(Comparator<? super T>) comparator |
nullを含む比較を行うComparatorを返す。nullは先頭になる |
static <T extends Comparable<T> nullLast(Comparator<? super T>) comparator |
nullを含む比較を行うComparatorを返す。nullは末尾になる |
default Comparator<T> reversed() |
このComparatorの逆順を義務付けるComparatorを返す |
コレクションが提供する便利なメソッド
Collectionsクラスの主なメソッド
クラス名 |
説明 |
static <T extends Comparable<? super T>> void sort(List<T> list) |
要素の「自然順序ずけ」 に従って、指定されたリストを昇順にソートする |
static <T> void sort(List<T> list,Comparator<? super T> c) |
指定されたコンパレータが示す順序に従って、指定されたリストをソートする。なお、第二引数にnullが指定されると自然順序になる |
static void reverse(List<?> list) |
指定されたリストの要素の順序を逆にする |
Arraysクラス
Arraysクラスの主なメソッド
クラス名 |
説明 |
static <T> List<T> asList(T ...a) |
引数で指定された配列をもとにリストを作成する |
static void sort(Object[] a) |
要素の自然順序ずけに従って、指定されたオブジェクトの配列を昇順でソートする。すべての要素は、Comparableインターフェースを実装している必要がある |
static <T> void sort(T[] a, Comparator<? super T> c) |
指定されたコンパレータが示す順序に従って、指定されたオブジェクトの配列をソートする。なお、第二引数にnullが指定されると自然順序になる |
ファクトリメソッド
- 変更不可能であるため、要素を追加、削除、置換することはできない
- セットとリストはnull要素を使用できない。
- マップは、キーと値ともにnull要素を使用できない。
- セットの場合、重複すう値は使用できない
- マップの場合、重複するキーは使用できない
Discussion