第15章 ArrayListとHashMap

この章ではArrayListとHashMapについて説明します。

HOMEPAGE

ArrayListとHashMap


ArrayListとは、内部的には配列を利用したリスト構造です。標準的な配列と異なる点は、サイズを後からでも変更できる点です。その性質上、インデックス値による値の読み書きは高速ですが、要素の挿入/削除は、配列サイズが大きくなるほど、また、操作位置が先頭に近くなるほど遅くなります。

ArrayList クラスのインスタンスを作成は以下になります。

ArrayList<型> 変数名 = new ArrayList<型>();
型の部分にはクラス名を指定します。 ここで指定したクラスのオブジェクトを要素として格納できるようになります。

注:intやdoubleなどは指定できません。これらの数値を格納したい場合には、各基本型に対応したラッパークラスを使用してください。

※各基本型に対応したクラス
基本データ型ラッパークラス
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble

文字列を格納する場合は次のように記述します。
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() リストに含まれる要素の数を取得

例:[JSample15_1.java]
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);   // 結果:[]
  }
}
実行結果
登録したデータの数:3個
Windows
Linux
macOS
2番目の要素はLinux
list.contains Linux = true
[Linux, macOS]
イチゴ
バナナ
[]


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() すべての値を取得

例:[JSample15_2.java]
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);    // 結果:{}
  }
}
実行結果
エアコン:air conditioner
パソコン:personal computer
リモコン:remote control
air conditioner:null
personal computer:null
remote control:null
true
false
要素数は3個です。
{エアコン=air conditioner, リモコン=remote control}
{}



練習

問題[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("オレンジジュース");
    }
}
実行結果
[ハンバーガー, チーズバーガー, ダブルチーズバーガー]
[ハンバーガー, チーズバーガー, ダブルチーズバーガー, ビッグバーガー]
該当するメニューはありません。
オレンジジュースはdrinkに含まれています。



戻る