挿入順に参照するLinkedHashMapとその使用例

ずっとMap、というと。。

<b>Map<key, value> map = new HashMap()<>;</b>

しか知らなかった。
が、<b>LinkedHashMap</b>なるものが存在する！

ということで、その使い方をば。

#LinkedHashMapとは

<b>挿入した順番を保持</b>する最高なMapです。

使う場面としては、
・挿入した順序で並べたい
・人間ならわかるが、コンピュータはわからない順序で並べる

の場面を紹介します。

#サンプルの内容

<b>行きたい都道府県を複数選んで表示する</b>サンプルです。

よく
「北は北海道、南は沖縄まで」
と言いますが、基本的には北→南で並びますよね。。。

一覧として
・北海道
・宮城県
・東京都
・大阪府
・愛知県
・福岡県
を設定します。

挿入する順番は上記のように北から順に挿入します。

# HashMapの場合

```java
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        
        //押下した都道府県が入るList
        List<String> prefectureClickedList = new ArrayList();
        //都道府県の一覧Map
        Map<String, Boolean> prefectureMap = new HashMap();
//        Map<String, Boolean> prefectureMap = new LinkedHashMap();
        {
            //北から挿入する
            prefectureMap.put("北海道", false);
            prefectureMap.put("宮城県", false);
            prefectureMap.put("東京都", false);
            prefectureMap.put("大阪府", false);
            prefectureMap.put("愛知県", false);    
            prefectureMap.put("福岡県", false);
        }
        
        //押下処理（順序はバラバラで）
        prefectureMap.put("福岡県", true);
        prefectureMap.put("大阪府", true);
        prefectureMap.put("東京都", true);
        prefectureMap.put("北海道", true);
        
        //prefectureClickedListに追加
        for(String prefecture: prefectureMap.keySet()) {
            Boolean bool = prefectureMap.get(prefecture);
            if(bool){
                prefectureClickedList.add(prefecture);
            }
        }
        
        //出力するString
        String outPrefecture = new String();
        
        //中点"・"を入れる"
        for(String clickedPref : prefectureClickedList) {
            outPrefecture = outPrefecture + clickedPref + "・";
        }
        outPrefecture = outPrefecture.substring(0, outPrefecture.length() -1);
        
        System.out.println("行きたい県：" + outPrefecture);
        
    }
}
```

出力結果

```
行きたい県：北海道・大阪府・東京都・福岡県
```

うーん、大阪と東京の順序を入れ替えたい！！ムズムズするww

# LinkedHashMapの場合

```java

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        
        //押下した都道府県が入るList
        List<String> prefectureClickedList = new ArrayList();
        //都道府県の一覧Map
//        Map<String, Boolean> prefectureMap = new HashMap();
        Map<String, Boolean> prefectureMap = new LinkedHashMap();
        {
            //北から挿入する
            prefectureMap.put("北海道", false);
            prefectureMap.put("宮城県", false);
            prefectureMap.put("東京都", false);
            prefectureMap.put("大阪府", false);
            prefectureMap.put("愛知県", false);    
            prefectureMap.put("福岡県", false);
        }
        
        //押下処理（順序はバラバラで）
        prefectureMap.put("東京都", true);
        prefectureMap.put("福岡県", true);
        prefectureMap.put("大阪府", true);
        prefectureMap.put("北海道", true);
        
        //prefectureClickedListに追加
        for(String prefecture: prefectureMap.keySet()) {
            Boolean bool = prefectureMap.get(prefecture);
            if(bool){
                prefectureClickedList.add(prefecture);
            }
        }
        
        //出力するString
        String outPrefecture = new String();
        
        //中点"・"を入れる"
        for(String clickedPref : prefectureClickedList) {
            outPrefecture = outPrefecture + clickedPref + "・";
        }
        outPrefecture = outPrefecture.substring(0, outPrefecture.length() -1);
        
        System.out.println("行きたい県：" + outPrefecture);
        
    }
}
```

出力結果

```
行きたい県：北海道・東京都・大阪府・福岡県
```

うん。何も違和感がなくなりました。

最＆高！

# まとめ
・都道府県の順序　：北から南
・洗濯の順序　　　：洗う、すすぎ、脱水
・四季　　　　　　：春、夏、秋、冬
・シャアの乗ったMS:ザク、ズゴック、(リックドム)、ゲルググ、ジオング。。

これらはパッと見、人間が見れば当たり前のことです。

北海道の緯度経度と福岡の緯度経度を調べて、より北から順に並べる。。
ってやればできますが、
<b>あらかじめ決められた順序</b>で入れることで対応できました。

#さいごに

なぜ自分はこんなすばらしいLinkedHashMapを知らなかったんだ。。
![p4.jpg](https://qiita-image-store.s3.amazonaws.com/0/238700/239958e1-c703-966b-7738-cb817058c343.jpeg)
<b>坊やだからさ </b>