17
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

アイエンター #1Advent Calendar 2018

Day 14

挿入順に参照する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
坊やだからさ

17
8
1

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
  3. You can use dark theme
What you can do with signing up
17
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?