モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)

Java コレクション関連

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2016/06/22
最終更新最終更新
2018/10/28
記事区分記事区分
一般公開

目次

    アカウント プロフィール画像 (サイドバー)

    Javaちょっとできるプログラマ。教育業界のエンジニアです。

    0
    ステッカーを贈るとは?

    Java のコレクションは以下の何れかのインターフェースを実装しています。

    • java.util.List
    • java.util.Set
    • java.util.Map

    それらとは別の概念として、リストに似たデータ構造の「配列」があります。

    • List と異なり、サイズを変更できません。
    • List と異なり、基本型の配列を宣言できます。

    また、Java 8 からは Scala コレクションのようなストリームが利用できます。

    配列

    import java.util.Arrays;
    import java.util.Comparator;
    
    class Main {
        public static void main(String args[]) {
    
            // 初期化方法
            int[] arr = new int[2];
            int[] arr2 = {2, 1};
            int[][] arr3 = new int[2][2];
            int[][] arr4 = {{1, 2}, {1, 2}};
    
            // ループ
            for(int i = 0; i < arr.length; ++i) {
            }
            for(int i : arr) {
            }
            for(int[] a : arr3) {
                for(int i : a) {
                }
            }
    
            // ソート
            Integer[] arr5 = {2, 3, 1};
    
            Arrays.sort(arr5);
            System.out.println(Arrays.toString(arr5)); //=> [1, 2, 3]
    
            Arrays.sort(arr2);
            System.out.println(Arrays.toString(arr2)); //=>  [1, 2]
    
            Arrays.sort(arr5, new Comparator<Integer>(){ // 基本型のソートはできません。ラッパークラスで使用します。
                public int compare(Integer i1, Integer i2) {
                    return i2 - i1;
                }
            });
            System.out.println(Arrays.toString(arr5)); //=> [3, 2, 1]
    
            // 二分探索
            Arrays.sort(arr5); // ニブタンのためにはソートされた配列が必要ですね。
            System.out.println(Arrays.binarySearch(arr5, 2)); //=>  1 (index of '2')
    
            // コピー
            int[] copied = Arrays.copyOf(arr2, arr2.length);
    
            // 要素の比較 (基本型は使用できません。ラッパークラスで使用します)
            System.out.println(Arrays.deepEquals(arr5, arr5)); //=> true
        }
    }
    

    リスト

    import java.util.List;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.Comparator;
    
    class Main {
        public static void main(String args[]) {
    
            // List には ArrayList と LinkedList があります。
            // 
            // ArrayList
            // 内部的に配列を利用しているため、サイズ拡張は低速。主な用途はこちらで。
            // 
            // LinkedList
            // いわゆる連結リスト。先頭と終端への要素の追加は高速。
    
            // 初期化方法
            List<Integer> list = new ArrayList<Integer>();
            // List<Integer> list = new ArrayList<>(); // 省略形
            // List<Integer> list = new ArrayList<>(2); // 初期メモリを確保する要素数を指定
    
            // 別の初期化方法
            List<Integer> list2 = Arrays.asList(1, 2, 3);
            List<Integer> list3 = Collections.emptyList(); // 空のリスト
    
            // 配列との相互変換
            Integer[] arr = list.toArray(new Integer[list.size()]);
            List<Integer> list4 = Arrays.asList(arr);
    
            // 追加
            list.add(123);
    
            // 削除
            list.remove(0); // index で指定
            list.remove(new Integer(0)); // 値で指定
            list.clear(); // すべて空にする
            list.removeIf(i -> i > 0); // Java 8 のみ
    
            // List の連結
            list.addAll(list2);
    
            // 値の設定
            list.set(0, -123);
    
            // 値の取得
            System.out.println(list.get(0)); // index で指定
    
            // サイズ
            System.out.println(list.size());
    
            // ループ
            for(Integer i : list) {
            }
            list.forEach(i -> System.out.println(i)); // Java 8 のみ
    
            // ソート
            Collections.sort(list);
            Collections.reverse(list); // reverse sort
            Collections.sort(list, new Comparator<Integer>(){
                public int compare(Integer i1, Integer i2) {
                    return i2 - i1;
                }
            });
    
            // 置換
            list.replaceAll(i -> i * i); // java 8
    
            // その他
            System.out.println(list.isEmpty());
            System.out.println(list.contains(123));
            System.out.println(list.indexOf(123)); // 最初の index (-1 if not found)
            System.out.println(list.lastIndexOf(123)); // 最後の index (-1 if not found)
        }
    }
    

    マップと集合

    import java.util.Map;
    import java.util.HashMap;
    import java.util.Set;
    import java.util.HashSet;
    
    class Main {
        public static void main(String args[]) {
    
            // マップ
            Map<String, Integer> map = new HashMap<>();
            map.put("key", 123);
            map.remove("key");
            map.clear();
            for(String key : map.keySet()) {
                System.out.println(map.get(key));
            }
            for(Integer value : map.values()) {
                System.out.println(value);
            }
            map.forEach((key, value) -> System.out.println(key + ": " + value)); // java 8
            System.out.println(map.get("key"));
            System.out.println(map.getOrDefault("key2", -123)); // java 8
            System.out.println(map.containsKey("key"));
            System.out.println(map.containsValue(123));
            System.out.println(map.size());
            System.out.println(map.isEmpty());
    
            // 集合
            Set<String> set = new HashSet<>();
            Set<String> set2 = new HashSet<>();
            set2.addAll(set);
            set.add("a");
            set.contains("a");
            set.remove("a");
            set.clear();
            set.size();
            set.isEmpty();
            for(String str : set) {
            }
            set.forEach(s -> System.out.println(s)); // java 8
        }
    }
    

    ストリーム (Java 8)

    import java.util.List;
    import java.util.Arrays;
    import java.util.stream.Stream;
    import java.util.stream.IntStream;
    import java.util.stream.LongStream;
    import java.util.stream.DoubleStream;
    import java.util.Optional;
    
    class Main {
        public static void main(String args[]) {
    
            // 新規作成
            Stream<Integer> s1 = Stream.of(1, 2, 3);
    
            IntStream s2 = IntStream.of(1, 2, 3);
            LongStream s3 = LongStream.of(1, 2, 3);
            DoubleStream s4 = DoubleStream.of(1.0, 2.0, 3.0);
    
            IntStream s5 = IntStream.range(1, 100); // 1, 2, ..., 99
            Stream<Integer> s6 = Stream.iterate(0, i -> i + 1);
    
            // 他のコレクションから変換
            List<Integer> list = Arrays.asList(1, 2, 3);
            Stream<Integer> s7 = list.stream();
    
            // 配列から変換
            Integer[] arr = {1, 2, 3};
            Stream<Integer> s8 = Arrays.stream(arr);
            Stream<Integer> s9 = Stream.of(arr);
    
            // 一度使用すると使えなくなります (ストリームは自動で閉じます)
            Stream<Integer> stream = Stream.of(1, 2, 3);
            stream.forEach(i -> System.out.println(i));
            //stream.forEach(i -> System.out.println(i)); // IllegalStateException: stream has already been operated upon or closed
    
            // 基本的な操作
            Stream.of(1, 2, 3).filter(i -> i > 0);
            Stream.of(1, 2, 3).map(i -> i * i);
            Stream.of(1, 2, 3).flatMap(i -> Stream.of(i, i * 10)); // flatten
            Stream.of(1, 2, 3).sorted((i1, i2) -> i1 - i2);
            Stream.of(1, 2, 3).distinct(); // 重複の削除
            Stream.of(1, 2, 3).forEach(i -> System.out.println(i));
            Stream.of(1, 2, 3).count(); // 無限ストリームのとき、無限ループになります。
            Stream.of(1, 2, 3).limit(2).count();
            IntStream.of(1, 2, 3).sum();
            Stream.of("a", "b").mapToInt(s -> s.length()); // IntStream 化
    
            // 結合
            Stream.concat(Stream.of(1, 2, 3), Stream.of(1, 2, 3)).count();
    
            // 条件判定
            Stream.of(1, 2, 3).allMatch(i -> i > 0); // true if all true
            Stream.of(1, 2, 3).anyMatch(i -> i > 0); // true if any true
            Stream.of(1, 2, 3).noneMatch(i -> i > 0); // true if all false
    
            // MapReduce の Reduce
            Optional<Integer> iOpt = Stream.of(1, 2, 3).reduce((i1, i2) -> i1 + i2);
            Integer i = Stream.of(1, 2, 3).reduce(0, (i1, i2) -> i1 + i2); // 初期値あり (必ず結果が存在するため Optional ではなくなります)
        }
    }
    

    他のコレクションへの変換

    import java.util.stream.Stream;
    import java.util.stream.Collectors;
    import java.util.Map;
    import java.util.List;
    import java.util.Set;
    
    class Main {
        public static void main(String args[]) {
    
            // Map に変換 (複数の List でグルーピング)
            Map<Boolean, List<Integer>> map = Stream.of(-1, -2, -3, 1, 2, 3).collect(Collectors.groupingBy(i -> i > 0)); // 正負でグルーピング
            System.out.println(map.get(true)); //=> [1, 2, 3]
            System.out.println(map.get(false)); //=> [-1, -2, -3]
    
            Map<Character, List<String>> map2 = Stream.of("Java", "JavaScript", "C++").collect(Collectors.groupingBy(s -> s.charAt(0)));
            System.out.println(map2.get('A')); //=> null
            System.out.println(map2.get('C')); //=> [C++]
            System.out.println(map2.get('J')); //=> [Java, JavaScript]
    
            // Map に変換
            Map<String, Integer> map3 = Stream.of(1, 2, 3)
                .collect(Collectors.toMap(i -> "key" + i, // key
                                          i -> i * i)); // value
            System.out.println(map3); //=> {key1=1, key2=4, key3=9}
    
            // List に変換
            List<Integer> list = Stream.of(1, 2, 3).collect(Collectors.toList());
    
            // Set に変換
            Set<Integer> set = Stream.of(1, 2, 3).collect(Collectors.toSet());
    
            // 配列に変換
            Object[] arr = Stream.of(1, 2, 3).toArray();
            Integer[] intArr = Stream.of(1, 2, 3).toArray(Integer[]::new);
        }
    }
    
    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    Javaちょっとできるプログラマ。教育業界のエンジニアです。

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    さらに詳しく →
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      関連記事

      • Spring Security フォームログインのサンプルコード
        Spring フレームワークによる Web アプリケーション開発で、ログイン処理を実装する際は Spring Security が便利です。ここでは特に Spring Boot で Web アプリケーションを開発する場合を対象とし、フォームによる ID/Password ログインを行うためのサンプルコードをまとめます。 公式ドキュメント [Spring Security チュートリアル](http...
        えびちゃんえびちゃん12/4/2019に更新
        いいねアイコン画像0
      • Java配列の宣言方法 (C/C++との違い)
        Javaの配列 Javaの配列宣言方法はC/C++と似ているようで若干異なる。 初期化しない場合 C/C++の int array[10]; はJavaでは int array[] = new int[10]; となる。同様にC/C++の int array[3][3]; はJavaでは int array[][] = new int[3][3]; となる。 初期化
        てんとうむしてんとうむし5/13/2018に更新
        いいねアイコン画像0
      • PlantUML による UML 図の描き方
        サムネイル画像-c788fffde5
        PlantUML はテキスト形式で表現されたシーケンス図やクラス図といった UML (Unified Modeling Language) 図の情報から画像を生成するためのツールです。簡単な使い方をまとめます。 インストール方法の選択 Atom や Eclipse のプラグインをインストールしてエディタから利用する方法、JAR をダウンロードして Java コマンドで実行する方法、Redmine ...
        kentakenta1/21/2020に更新
        いいねアイコン画像0
      • Akka HTTP サンプルコード (Scala)
        サムネイル画像-a98142497c
        Akka アクターを用いて実装された汎用 HTTP フレームワークです。Spray の後継です。コアモジュールである akka-http-core は 2016/2/17 に experimental が外れました。akka-http などのいくつかのサブモジュールは 2016/3/1 現在 experimental のままですが、基本的な
        雄太雄太10/7/2021に更新
        いいねアイコン画像0
      • Kestrel の使用例
        Kestrel は Message Queue (MQ) の実装のひとつです。一般に MQ はアプリケーション間やプロセス間、スレッド間で非同期に通信するために用いられます。メッセージの送信側は MQ に書き込めば受信側の応答を待たずに次の処理に非同期に進むことができます。Kestrel はわずか 2500 行程の Scala で実装されており JVM で動作します。MQ 自体はメモリ上に存在する...
        したくんしたくん10/12/2017に更新
        いいねアイコン画像0