LoginSignup
8

More than 3 years have passed since last update.

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

Posted at

ずっとMap、というと。。

Map map = new HashMap()<>;

しか知らなかった。
が、LinkedHashMapなるものが存在する!

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

LinkedHashMapとは

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

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

の場面を紹介します。

サンプルの内容

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

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

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

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

HashMapの場合

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の場合


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:ザク、ズゴック、(リックドム)、ゲルググ、ジオング。。

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

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

さいごに

なぜ自分はこんなすばらしいLinkedHashMapを知らなかったんだ。。
p4.jpg
坊やだからさ

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
8