Javaでは、コレクションフレームワークという複数の要素のデータを扱うための機能があり、List、Set、Mapなどのインタフェースがある。
コレクションフレームワークについては、以下のサイトを参照のこと。
https://ittoybox.com/archives/206
今回は、List、Set、Mapの各インタフェースについて、代表的なクラスのデータの格納順がどうなるか確認してみたので、そのサンプルプログラムを共有する。
前提条件
下記記事のIntelliJ IDEA Community版をダウンロード済であること。
また、下記のように、「demoJava」というJavaプロジェクトを作成済であること。
なお、IntelliJ IDEA上でJavaプロジェクトを作成する方法については、IntelliJ IDEA Community版をダウンロードする記事内の、「IntelliJ IDEA上でのJavaプロジェクトの作成・実行」を参照のこと。
サンプルプログラムの作成
作成したサンプルプログラムの構成は以下の通り。
なお、上記の赤枠は、今回新規で作成したプログラムである。
DemoList.javaの内容は以下の通りで、ArrayList・LinkedListの格納順を調べるようになっている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | package demo.java; import java.util.ArrayList; import java.util.LinkedList; public class DemoList { public static void main(String[] args){ //ArrayListのサンプル ArrayList<String> aList = new ArrayList<>(); aList.add("value1"); aList.add("value3"); aList.add("value5"); aList.add("value4"); aList.add("value2"); System.out.println("要素の参照が多いときはArrayListがよい"); System.out.println("ArrayListの格納順は登録した順番"); System.out.println("aList" + aList); System.out.println(); //LinkedListのサンプル LinkedList<String> lList = new LinkedList<>(); lList.add("value1"); lList.add("value3"); lList.add("value5"); lList.add("value4"); lList.add("value2"); System.out.println("要素の追加や削除が多いときはLinkedListがよい"); System.out.println("LinkedListの格納順は登録した順番"); System.out.println("lList" + lList); System.out.println(); } } |
また、DemoSet.javaの内容は以下の通りで、HashSet・TreeSet・LinkedHashSetの格納順を調べるようになっている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | package demo.java; import java.util.HashSet; import java.util.TreeSet; import java.util.LinkedHashSet; public class DemoSet { public static void main(String[] args){ //HashSetのサンプル HashSet<String> hSet = new HashSet<>(); hSet.add("value1"); hSet.add("value3"); hSet.add("value5"); hSet.add("value4"); hSet.add("value2"); System.out.println("HashSetの格納順は不定"); System.out.println("hSet : " + hSet); System.out.println(); //TreeSetのサンプル TreeSet<String> tSet = new TreeSet<>(); tSet.add("value1"); tSet.add("value3"); tSet.add("value5"); tSet.add("value4"); tSet.add("value2"); System.out.println("TreeSetの格納順は値の昇順"); System.out.println("tSet : " + tSet); System.out.println(); //LinkedHashSetのサンプル LinkedHashSet<String> lhSet = new LinkedHashSet<>(); lhSet.add("value1"); lhSet.add("value3"); lhSet.add("value5"); lhSet.add("value4"); lhSet.add("value2"); System.out.println("LinkedHashSetの格納順は登録した順番"); System.out.println("lhSet : " + lhSet); System.out.println(); } } |
さらに、DemoMap.javaの内容は以下の通りで、HashMap・TreeMap・LinkedHashMapの格納順を調べるようになっている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | package demo.java; import java.util.HashMap; import java.util.TreeMap; import java.util.LinkedHashMap; public class DemoMap { public static void main(String[] args){ //HashMapのサンプル HashMap<String, String> hMap = new HashMap<>(); hMap.put("key1", "value1"); hMap.put("key3", "value3"); hMap.put("key5", "value5"); hMap.put("key4", "value4"); hMap.put("key2", "value2"); System.out.println("HashMapの格納順は不定"); System.out.println("hMap : " + hMap); System.out.println(); //TreeMapのサンプル TreeMap<String, String> tMap = new TreeMap<>(); tMap.put("key1", "value1"); tMap.put("key3", "value3"); tMap.put("key5", "value5"); tMap.put("key4", "value4"); tMap.put("key2", "value2"); System.out.println("TreeMapの格納順はキー項目の昇順"); System.out.println("tMap : " + tMap); System.out.println(); //LinkedHashMapのサンプル LinkedHashMap<String, String> lhMap = new LinkedHashMap<>(); lhMap.put("key1", "value1"); lhMap.put("key3", "value3"); lhMap.put("key5", "value5"); lhMap.put("key4", "value4"); lhMap.put("key2", "value2"); System.out.println("LinkedHashMapの格納順は登録した順番"); System.out.println("lhMap : " + lhMap); System.out.println(); } } |
サンプルプログラムの実行結果
サンプルプログラムの実行結果は、以下の通り。
1) DemoList.javaの実行結果は以下の通りで、ArrayList・LinkedListとも、登録した順番にデータが格納されることが確認できる。
2) DemoSet.javaの実行結果は以下の通りで、TreeSetは値の昇順に、LinkedHashSetは登録した順番に、それぞれデータが格納されることが確認できる。
3) DemoMap.javaの実行結果は以下の通りで、TreeMapはキー値の昇順に、LinkedHashMapは登録した順番に、それぞれデータが格納されることが確認できる。
要点まとめ
- Javaでは、コレクションフレームワークという複数の要素のデータを扱うための機能があり、List、Set、Mapなどのインタフェースがある。
- Listは複数の要素の順番を保持するコレクションで、ArrayList・LinkedListとも、登録した順番にデータが格納されるが、要素の追加や削除が多いときはLinkedList、要素の参照が多いときはArrayListが向いている。
- Setは重複要素を持たない要素の集合で、TreeSetは値の昇順に、LinkedHashSetは登録した順番に、それぞれデータが格納される。
- Mapはキーと要素とのマッピングを表すデータ構造で、TreeMapはキー値の昇順に、LinkedHashMapは登録した順番に、それぞれデータが格納される。