こんにちは。くまごろーです。
最近また『スッキリわかるJava 実践編』をやり始めて、コレクションについて勉強しました。
今までListとかMapとかは、調べながら実際に使ったことはあったのですが、正直具体的にどういうものなのかはよくわかってませんでした。
というわけで、これからまとめておこうと思います。
1 コレクションとは
Javaには、「データをまとめて格納するための入れ物クラス」がAPIとして準備されている。それらはjava.utilパッケージに属していて、コレクションフレームワークと総称されている。コレクションクラスには以下のようなものがある。
- リスト(List)
順序どおりに並べて格納する(中身の重複は可能)
- セット(Set)
順序があるとは限らない(中身の重複は不可)
- マップ(Map)
ペアで対応付けて格納する
2 Listの使い方(ArrayList)
(1)ArrayListの宣言
ArrayList<型>変数名 = new ArrayList<型>();
(2)メソッド(要素の追加・取得・削除・調査)
メソッド | 意味 | 戻り値 |
---|---|---|
add(値) | リストの最後に要素を追加 | boolean |
add(x,値) | リストのx番目に要素を挿入 | void |
set(x,値) | リストのx番目にの要素上書き | |
get(x) | x番目の要素を取り出す | |
size() | 格納されている要素数を返す | int |
isEmpty() | 要素がゼロであるか判定 | boolean |
contains(値) | 指定要素が含まれているか判定 | boolean |
indexOf(値) | 指定要素が何番目にあるか検索 | int |
iterator() | 要素を順に処理するイテレータを返す | iterator<~> |
clear() | 要素をすべて削除する | void |
remove(値) | int番号の要素を削除する |
(3)for文を用いたリスト要素の取り出し
for(int i = 0; i < リスト変数.size(); i++){ //リスト変数.get(i)で要素を読み書き }
※ 拡張forの場合
for(リスト要素の型 e : リスト変数){ //eで要素を読み書き }
(4)LinkedListとは
Listには、LinkedListというクラスもあり、以下の様な仕様になっている。
次にLinkedListクラスを見ていきます。ArrayListと似ていますが、中に含まれる要素がどのように並んでいるかを別に管理しているため、要素を追加したり削除したりする場合にArrayListと比較して高速に動作します。逆に要素を検索しようとする場合は先頭から順にリンクをたどって検索するためArrayListと比較して遅くなります。
LinkedListクラス - コレクション(LinkedList) - Java入門
(5)ArrayListとLinkedListの違い
ArrayList | LinkedList | |
---|---|---|
内部構造 | 配列 | 連結リスト |
要素の挿入・削除 | 遅い | 高速 |
指定位置の要素の取得 | 高速 | 遅い |