Java Gold メソッド逆引き早見表 Collection Map 返し値 


# 主要メソッド

| メソッド名                | 宣言されたインターフェイスおよびクラス名 | 引数の型                   | 戻り値の型             | 要素が空の場合の動作                  |
|---------------------------|------------------------------------------|--------------------------|-----------------------|--------------------------------------|
| `add(E e)`                 | `Collection<E>`                          | `E`                      | `boolean`             | `false`を返す（失敗時）、例外を投げる可能性あり |
| `get(int index)`           | `List<E>`                                | `int`                    | `E`                   | 例外 (`IndexOutOfBoundsException`)  |
| `set(int index, E element)`| `List<E>`                                | `int`, `E`               | `E`                   | 例外 (`IndexOutOfBoundsException`)  |
| `removeIf(Predicate<? super E> filter)` | `Collection<E>`           | `Predicate<? super E>`   | `boolean`             | 空の場合、`false`を返す |
| `poll()`                   | `Queue<E>`                               | なし                     | `E`                   | `null`を返す                         |
| `peek()`                   | `Queue<E>`, `Deque<E>`                   | なし                     | `E`                   | `null`を返す                         |
| `replace(K key, V value)`  | `Map<K,V>`                               | `K`, `V`                 | `V`                   | 要素が存在しない場合、`null`を返す |
| `put(K key, V value)`      | `Map<K,V>`                               | `K`, `V`                 | `V`                   | `null`を返す (要素が存在しなかった場合) |
| `get(Object key)`          | `Map<K,V>`                               | `Object`                 | `V`                   | 要素が存在しない場合、`null`を返す |
| `replace(K key, V oldValue, V newValue)` | `Map<K,V>`               | `K`, `V`, `V`            | `boolean`             | 要素が存在しない場合、`false`を返す |
| `compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)` | `Map<K,V>` | `K`, `BiFunction<? super K,? super V,? extends V>` | `V` | 要素が存在しない場合、`null`を返す可能性あり |
| `remove(Object o)`         | `Collection<E>`                          | `Object`                 | `boolean`             | `false`を返す（要素が存在しない場合）|
| `remove(int index)`        | `List<E>`                                | `int`                    | `E`                   | 例外 (`IndexOutOfBoundsException`)  |
| `remove(Object key)`       | `Map<K,V>`                               | `Object`                 | `V`                   | 要素が存在しない場合、`null`を返す |
|`remove()`           |`Queue<E>`       |なし  | `E`   | 例外(`NoSuchElementException`)

:::note alert
`remove`メソッドなど、インターフェイスによって返し値が全く違うので注意
:::


### Dequeのメソッド

| メソッド名                | 宣言されたインターフェイスおよびクラス名 | 引数の型                   | 戻り値の型             | 要素が空の場合の動作                  |
|---------------------------|------------------------------------------|--------------------------|-----------------------|--------------------------------------|
| `push(E e)`                | `Deque<E>`                               | `E`                      | `void`                | 例外を投げる可能性あり               |
| `pop()`                    | `Deque<E>`                               | なし                     | `E`                   | 例外 (`NoSuchElementException`)  |
| `peek()`                   | `Queue<E>`, `Deque<E>`                   | なし                     | `E`                   | `null`を返す                         |
| `removeFirst()`            | `Deque<E>`                               | なし                     | `E`                   | 例外 (`NoSuchElementException`)  |
| `removeLast()`             | `Deque<E>`                               | なし                     | `E`                   | 例外 (`NoSuchElementException`)  |
| `pollFirst()`              | `Deque<E>`                               | なし                     | `E`                   | `null`を返す                         |
| `pollLast()`               | `Deque<E>`                               | なし                     | `E`                   | `null`を返す                         |
| `offerFirst(E e)`          | `Deque<E>`                               | `E`                      | `boolean`             | 失敗した場合、`false`を返す           |
| `offerLast(E e)`           | `Deque<E>`                               | `E`                      | `boolean`             | 失敗した場合、`false`を返す           |
| `peekFirst()`              | `Deque<E>`                               | なし                     | `E`                   | `null`を返す                         |
| `peekLast()`               | `Deque<E>`                               | なし                     | `E`                   | `null`を返す                         |




# nullの扱い

| コレクションクラス/インターフェイス | `null`のキーの許可 | `null`の値の許可 | `null`に関連する動作 |
|--------------------------------------|-------------------|-----------------|--------------------|
| `ArrayList`                          | 許可               | 許可             | `null`を格納・検索・削除可能。 |
| `LinkedList`                         | 許可               | 許可             | `null`を格納・検索・削除可能。 |
| `HashSet`                            | 許可               | 許可             | `null`を格納・検索・削除可能。 |
| `TreeSet`                            | 許可しない         | 許可しない       | `null`を追加しようとすると`NullPointerException`が発生。 |
| `HashMap`                            | 許可               | 許可             | `null`をキーや値として使用可能。ただし、`null`キーは1つだけ格納可能。 |
| `TreeMap`                            | 許可しない         | 許可             | `null`キーを使用すると`NullPointerException`が発生。値としての`null`は許可される。 |
| `Hashtable`                          | 許可しない         | 許可しない       | `null`キーまたは`null`値を使用すると`NullPointerException`が発生。 |
| `ConcurrentHashMap`                  | 許可しない         | 許可しない       | `null`キーまたは`null`値を使用すると`NullPointerException`が発生。 |
| `PriorityQueue`                      | 許可しない         | 許可しない       | `null`を追加しようとすると`NullPointerException`が発生。 |
| `ArrayDeque`                         | 許可しない         | 許可しない       | `null`を追加しようとすると`NullPointerException`が発生。 |
| `EnumMap`                            | 許可しない         | 許可             | キーに`null`を使用すると`NullPointerException`が発生。値としての`null`は許可される。 |
| `Vector`                             | 許可               | 許可             | `null`を格納・検索・削除可能。 |
| `Stack`                              | 許可               | 許可             | `null`を格納・検索・削除可能。 |
| `LinkedHashMap`                      | 許可               | 許可             | `null`キーと`null`値の使用が可能。 |
| `WeakHashMap`                        | 許可               | 許可             | `null`キーと`null`値の使用が可能。ただし、ガベージコレクションが発生した場合、`null`キーは削除される。 |

### 補足

- **`null`のキーを許可するコレクション**:
  - `HashMap`, `LinkedHashMap`, `WeakHashMap` は、`null`キーを1つだけ許可します。この場合、`null`キーは他のキーと同様に扱われ、適切に格納・検索・削除が行われます。

- **`null`を許可しないコレクション**:
  - `TreeSet`, `TreeMap`, `Hashtable`, `ConcurrentHashMap`, `PriorityQueue`, `ArrayDeque` などは、`null`キーや`null`値を許可しません。これらのコレクションに`null`を追加しようとすると、`NullPointerException`が発生します。
  
- **`TreeSet`と`TreeMap`**:
  - これらは順序を保つために内部で比較操作を行う必要があり、`null`値の比較は不可能であるため`null`を許可しません。キーとしても値としても`null`はサポートされません。

- **スレッドセーフなコレクション**:
  - `Hashtable`や`ConcurrentHashMap`などのスレッドセーフなコレクションは、`null`キーや`null`値を許可しません。これにより、`null`による潜在的な競合状態を防ぐことができます。





# 不変コレクションの作成方法と例外処理


不変コレクションは、作成後に変更されないコレクションであり、変更操作が試みられた場合には`UnsupportedOperationException`が発生します。これにより、データの整合性を保証できるため、特定の場面で非常に有用です。特に、設計上変更が必要ないデータを扱う場合や、不変性が求められる環境（例：マルチスレッド環境）で役立ちます。

| コレクションの種類   | 作成方法 | メソッド                       | 例外が発生する操作 | 例外の種類                       |
|--------------------|----------|-------------------------------|-------------------|----------------------------------|
| 不変リスト (`List`) | `List.of()`<br>`Collections.unmodifiableList()` | `add(E e)`<br>`remove(Object o)`<br>`set(int index, E element)` | 要素の追加、削除、変更 | `UnsupportedOperationException` |
| 不変セット (`Set`)  | `Set.of()`<br>`Collections.unmodifiableSet()` | `add(E e)`<br>`remove(Object o)` | 要素の追加、削除 | `UnsupportedOperationException` |
| 不変マップ (`Map`)  | `Map.of()`<br>`Collections.unmodifiableMap()` | `put(K key, V value)`<br>`remove(Object key)` | 要素の追加、削除 | `UnsupportedOperationException` |

---
https://qiita.com/T-ngtj/private/df254aacd05be698199a