Javaの配列やコレクションは集合を取り扱うデータ構造です。複数の要素(オブジェクト)の集合をうまく取り扱うことで、プログラムの見通しを改善できます。
🎂 コレクション
コレクション・フレームワークのインターフェースと具象クラスの一覧です。

出典:改訂2版 パーフェクトJava
コレクションを使うコードのサンプルです。
ListはStringを要素とするリストです。コレクション型の要素には参照型を指定します。インターフェースの
Listを使うのは、実装ArrayListよりも依存を下げるためです。public class SampleList { |
🚌 Listインターフェースのメソッド
Listインターフェースの代表的なメソッドの紹介です。
| メソッド名 | 説明 |
|---|---|
add |
要素の追加 |
addAll |
要素をまとめて追加 |
contains |
要素の存在チェック |
get |
要素の取得 |
indexOf |
要素の検索 |
lastIndexOf |
後方からの要素の検索 |
remove |
要素の削除(複数ある場合は最初の要素を削除) |
set |
要素の置換 |
size |
要素数の取得 |
subList |
部分リストの取得(コピーではなく、参照による部分リストを返す) |

出典:改訂2版 パーフェクトJava
Listどうしの結合:addAll
JavaのListインターフェイスで定義されたaddAll()メソッドはListどうしを結合できます。
import java.util.ArrayList; |
結果は次のとおりで、2つのListが結合されているのがわかります。
1-1 |
🐯 ArrayListとLinkedListの選び方
Listインターフェースの主要な具象クラスは、配列を使った実装のArrayListとリンクノードを使った実装のLinkedListがあります。
ArrayListは取得(get)や要素の更新(set)が早いですが、要素の挿入(add)が早くありませんLinkedListは要素の挿入(add)、削除(remove)が早いですが、検索(indexOf)や要素の取得(get)は早くありません
上の特徴を踏まえて、ArrayListとLinkedListは次のように使い分けます。
- 要素の読み込み(検索)や書き換えが中心なら
ArrayListがよい - 要素の挿入や削除の頻度が高い場合は
LinkedListが効率的
🚕 補足:ArrayのtoStringについて
配列ArrayのtoStringは次のような定義になります。
public String toString() { |
つまり、配列をSystem.out.printlnに渡すとハッシュ値を返します。
🐮 補足:配列の初期化演算子
配列の初期化はいくつかパターンがあるので注意してください。
int[] array = { 2, 3 }; |
以下はコンパイルエラーになるので注意してください。
// { xxx } で要素数を自動で取得するので指定してはだめ |
😼 補足:配列のコピー:arraycopy
配列のコピーを行うSystem.arraycopyは5つの引数を受け取る少し不雑なメソッドです。
| 引数 | 説明 |
|---|---|
| 第1引数 | コピー元となる配列 |
| 第2引数 | コピー元のどの位置からコピーを開始するか(0始まり) |
| 第3引数 | コピー先の配列 |
| 第4引数 | コピー先配列のどの位置からコピーを開始するか(0始まり) |
| 第5引数 | 第2引数のいちからいくつの要素をコピーするか |
char[] arrayA = { 'a', 'b', 'c', 'd', 'e' }; |
🎃 補足:java.util.Queueインターフェース
キュー専用のインターフェイス。Queueの実装はArrayDequeを使うと良さそう。
Queue |
| オプション | 失敗時に例外 | 戻り値で判定 |
|---|---|---|
| 末尾に追加 | add() |
offer() |
| 先頭から削除 | remove() |
poll() |
| 先頭から取得(削除しない) | element() |
peek() |
🍮 補足:ArrayからArrayListへの変換
JavaでArrayからArrayListに変換する方法です。
String[] alpha = { "a", "b", "c", "d", "e" }; |
🎉 参考リンク
- 改訂2版 パーフェクトJava
- How to join/combine two ArrayLists in java
- java - Why is ArrayDeque better than LinkedList
