ArrayListとは、内部的には配列を利用したリスト構造です。標準的な配列と異なる点は、サイズを後からでも変更できる点です。その性質上、インデックス値による値の読み書きは高速ですが、要素の挿入/削除は、配列サイズが大きくなるほど、また、操作位置が先頭に近くなるほど遅くなります。
ArrayList クラスのインスタンスを作成は以下になります。
ArrayList<型> 変数名 = new ArrayList<型>();型の部分にはクラス名を指定します。 ここで指定したクラスのオブジェクトを要素として格納できるようになります。
基本データ型 | ラッパークラス |
---|---|
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
ArrayList<String> list = new ArrayList<>();int 型を格納する場合は次のように記述します。
ArrayList<Integer> list = new ArrayList<>();
ArrayListクラスで利用できる主なメソッド | |
---|---|
メソッド | 概要 |
add([int index,] E e) | 指定位置indexに要素eを挿入(index省略で末尾に挿入) |
clear() | リストからすべての要素を削除 |
contains(Object e) | リストに要素eが含まれているかを判定 |
get(int index) | index番目の要素を取得 |
indexOf(Object e) | 要素eが登場する最初のインデックス値を取得 |
isEmpty() | リストが空か判定 |
remove(int index|Object o) | 指定の要素を削除 |
set(int index, E e) | index番目の要素を設定 |
int size() | リストに含まれる要素の数を取得 |
package JSample; import java.util.ArrayList; import java.util.List; public class JSample15_1 { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("Windows"); list.add("Linux"); list.add("macOS"); System.out.println("登録したデータの数:" + list.size() + "個"); for (String str : list) { System.out.println(str); // 結果:Windows、Linux、macOS } System.out.println("2番目の要素は" + list.get(1)); // 結果:2番目の要素はLinux System.out.println("list.contains Linux = " + list.contains("Linux")); // 結果:list.contains Linux = true list.remove(0); System.out.println(list); // 結果:[Linux, macOS] list.set(0, "イチゴ"); list.set(1, "バナナ"); for (String str : list) { System.out.println(str); // 結果:[イチゴ, バナナ] } list.clear(); System.out.println(list); // 結果:[] } }実行結果
HashMapとは、リストやセット、キューと異なり、キーと値の組み合わせで要素を管理します。HashMapは、マップの実装クラスの中でも最も基本的なクラスです。キーは重複できず、また順番を持ちません。
HashMapクラスのインスタンスを作成は以下になります。
HashMap<キーのデータ型,値のデータ型> 変数名 = new HashMap<>();HashMap クラスでは要素にキーと値をペアで格納します。そのため、キーのデータ型と値のデータ型をそれぞれ指定します。例えばキーに文字列、値に整数を格納する場合は次のように記述します。
HashMap<String,Integer> map = new HashMap<>();
HashMapクラスの主なメソッド | |
---|---|
メソッド | 概要 |
clear() | すべての要素を削除 |
containsKey(Object key) | キーkeyがマップに含まれているかを判定 |
containsValue(Object value) | 値valueがマップに含まれているかを判定 |
get(Object key) | キーkeyに対応する値を取得 |
isEmpty() | マップが空かを判定 |
keySet() | すべてのキーを取得 |
put(K key, V value) | 指定されたキー/値の組み合わせを追加 |
remove(Object key) | 指定のキーを削除 |
int size() | マップの要素数を取得 |
Collection<V> values() | すべての値を取得 |
package JSample; import java.util.HashMap; import java.util.Map; public class JSample15_2 { public static void main(String[] args) { Map実行結果map = new HashMap () { { put("パソコン", "personal computer"); put("エアコン", "air conditioner"); put("リモコン", "remote control"); } }; for (String str : map.keySet()) { System.out.println(str + ":" + map.get(str)); // 結果:エアコン:air conditioner、パソコン:personal computer、リモコン:remote control } for (String val : map.values()) { System.out.println(val + ":" + map.get(val)); // 結果:air conditioner、personal computer、remote control } System.out.println(map.containsKey("エアコン")); // 結果:true System.out.println(map.containsValue("tourconductor")); // 結果:false if (!map.isEmpty()) { System.out.println("要素数は" + map.size() + "個です。"); // 結果:要素数は3個です。 } map.remove("パソコン"); System.out.println(map); // 結果:{エアコン=air conditioner, リモコン=remote control} map.clear(); System.out.println(map); // 結果:{} } }
問題[JEx15_1]
HashMapとArrayList両方使って提供されたMenuManagerクラスを利用して、下記の結果を作成ください。
[MenuManager.java]
import java.util.*; public class MenuManager{ //ここにフィールドを追加します。 //コンストラクタ MenuManager(){ //サンドイッチメニューの登録 ArrayList<String> list = new ArrayList<>(); list.add("ハンバーガー"); list.add("チーズバーガー"); list.add("ダブルチーズバーガー"); map.put("sandwitch",list); //ドリンクメニューの登録 list = new ArrayList<>(); list.add("コーラ"); list.add("オレンジジュース"); list.add("ミネラルウォーター"); map.put("drink",list); //サイドメニューの登録 list = new ArrayList<>(); list.add("フライドポテト"); list.add("チキンナゲット"); list.add("フレッシュサラダ"); map.put("sidemenu",list); } //ここにsearchMenuを作成します。 //ここにsetMenuを作成します。 //ここにshowMenuを作成します。 }[JEx15_1.java]
public class Ex14_1{ public static void main(String[] args) { MenuManager manager = new MenuManager(); //サンドイッチメニューの表示 manager.showMenu("sandwitch"); //サンドイッチメニューにビッグバーガーを追加 manager.setMenu("sandwitch","ビッグバーガー"); //サンドイッチメニューの表示 manager.showMenu("sandwitch"); //「ホットミルク」をメニューから検索 manager.searchMenu("ホットミルク"); //「オレンジジュース」をメニューから検索 manager.searchMenu("オレンジジュース"); } }実行結果