Skip to content

Latest commit

 

History

History
210 lines (150 loc) · 6.3 KB

Chapter09.md

File metadata and controls

210 lines (150 loc) · 6.3 KB

9. コレクション

List, Set, Mapについて説明します

  • Listは、要素を順番に保存していくデータ構造です。

  • Setは要素の重複を許さないデータ構造です。

  • Mapはキーと呼ばれる要素とそのキーに対応した値を保存するためのデータ構造です

9.1. List

Listは、配列に似たデータ構造で、動的に要素数を変更することができます。 Listに格納される要素は、インデックスによってアクセスすることができます。

Listは、java.utilパッケージに属しているので、使用する際にはインポートする必要があります。 ListにはArrayList、LinkedListなどのクラスが実装されています。

  • ArrayList 内部的に配列を使用したリストの実装クラス リスト中の要素へのアクセス処理を高速で行うことができる 要素の追加や削除にコストが掛かる

  • LinkedList 内部的に連結リストを使用したリストの実装クラス 要素へのアクセス処理はコストが高い 要素の追加や削除の処理は高速で行うことができる

それぞれのクラスには、Listインターフェースを実装しているため、同じような方法で使用することができます。

リストオブジェクトを作成するには以下のように宣言します

new オブジェクト名<ジェネリクス>();

//例
new ArrayList<Integer>();
new LinkedList<String>();

以下は、ArrayListを使用したListの例です。 ArrayListは、可変長の配列として実装されており、要素の追加や削除が高速に行えます。

import java.util.ArrayList;
import java.util.List;

public class Example {
    public static void main(String[] args) {
        // Listの作成
        List<String> language = new ArrayList<String>();
        // 要素の追加
        language.add("java");
        language.add("c++");
        language.add("python");
        language.add("scala");

        // 要素の取得
        String item = language.get(1);  // item に "c++" を代入
        System.out.println(item);   

        // 要素の削除
        language.remove(2);  // "python"を削除

        // 要素数を取得
        int size = language.size();  // 3

        // 要素のループ (拡張for文)
        for (String s : language) {
            System.out.println("Hello " + s);
        }

        // 要素の書き換え
        language.set(2,"kotlin"); // 要素(2)のscalaをkotolinに書き換え
        System.out.println(language);
    }
}

出力:

c++
Hello java
Hello c++
Hello scala
[java, c++, kotlin]

宣言の仕方

List<String> list = new ArrayList<String>();

上記の例では、Listはインターフェースであり、ArrayListはListインターフェースを実装したクラスです。<String>は、Listに格納される要素の型を示しています。 この場合、文字列を格納するためにStringを使用しています。


9.2. Set

Setは、集合論の概念に基づいており、要素の順序は保証されません。 また、Setは、要素の重複を許可しないため、同じ値を複数回格納することはできません。

JavaのSetには、java.utilパッケージに含まれるHashSet、TreeSet、LinkedHashSetなどがあります。 それぞれのクラスには、Setインターフェースを実装しているため、同じような方法で使用することができます。

以下は、HashSetを使用したSetの例です。HashSetは、要素の追加や削除が高速に行えます。

import java.util.HashSet;
import java.util.Set;

public class Example {
    public static void main(String[] args) {
        // 宣言
        Set<String> set = new HashSet<String>();

        // 要素の追加 (要素数 = 4)
        set.add("java");
        set.add("c++");
        set.add("python");
        set.add("html");
        
        // 要素の取得
        String element = "c++";
        boolean contains = set.contains(element);  // true
        if(contains) { //true
            System.out.println(element + " is included in the set");
        }else{
            System.out.println(element + " is not included in the set");
        }

        // 要素の削除
        set.remove("python");

        // 要素の数を取得
        int size = set.size();  // removeしたので3
        System.out.println(size);
        
        boolean isE = set.isEmpty(); //false
        
        if(!isE) { // !false -> true
            // 要素のループ(拡張for文)
            for (String s : set) {
                System.out.println(s);
            }
        }
        
    }
}
c++ is included in the set
3
c++
java
html


9.3. Map

JavaのMapは、キーと値のペアを格納するデータ構造であり、キーを使って値にアクセスすることができます。 Mapは、java.utilパッケージに含まれるクラスであり、HashMap、TreeMap、LinkedHashMapなどがあります。 それぞれのクラスには、Mapインターフェースを実装しているため、同じような方法で使用することができます。

以下はHashMapを使用したMapの例です。HashMapは、キーと値の追加、取得、削除が高速に行えます。

import java.util.HashMap;
import java.util.Map;

public class Example {
    public static void main(String[] args) {
        // 宣言
        Map<String, Integer> map = new HashMap<String, Integer>();

        // 要素の追加
        map.put("A", 100);
        map.put("B", 200);
        map.put("C", 300);

        // 要素の取得
        int value = map.get("A");  // 100

        // 要素の削除
        map.remove("B");

        // 要素の数を取得
        int size = map.size();  // 2

        // キーのループ
        for (String key : map.keySet()) {
            System.out.println(key + " : " + map.get(key));
        }
    }
}