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の格納順を調べるようになっている。
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の格納順を調べるようになっている。
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の格納順を調べるようになっている。
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は登録した順番に、それぞれデータが格納される。





