タイトル
TOPJavaTIPS → This Page

HashMapの注意点【Java の TIPS、小ネタ、注意点】

前提

Java開発におけるHashMapを使う際の注意点を紹介します。
このページに記載している内容は2013/03/12に書かれたものです。
掲載している画面や方法が将来的に変更されている場合があります。

順序性

HashMapは挿入したオブジェクトの順序性が保障されていません。
順序性を保障したければLinkedHashMap、キーで自動的にソートしたければTreeMapを使います。

それぞれを実際に使ってみましょう。

package jp.mitchy_world.hash;

import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;

/**
 * マップの順序性確認サンプル
 * 
 * @author みっちー
 */
public class Hash {
	/**
	 * メイン
	 * 
	 * @param args パラメータ
	 */
	public static void main(String[] args) {
		// マップ初期化
		Map<String, String> mapH = new HashMap<String, String>();
		Map<String, String> mapL = new LinkedHashMap<String, String>();
		Map<String, String> mapT = new TreeMap<String, String>();

		// マップにオブジェクトを追加
		putData(mapH);
		putData(mapL);
		putData(mapT);

		// マップのオブジェクトを表示
		displayData(mapH);
		displayData(mapL);
		displayData(mapT);
	}

	/**
	 * マップにオブジェクトを追加
	 * 
	 * @param map マップオブジェクト
	 */
	private static void putData(Map<String, String> map) {
		map.put("3", "うううううううううう");
		map.put("2", "いいいいいいいいいい");
		map.put("1", "ああああああああああ");
		map.put("0", "んんんんんんんんんん");
		map.put("4", "ええええええええええ");
		map.put("5", "おおおおおおおおおお");
	}

	/**
	 * マップのオブジェクトを表示
	 * 
	 * @param map マップオブジェクト
	 */
	private static void displayData(Map<String, String> map) {
		System.out.println(map.getClass().toString());
		for (Iterator it = map.entrySet().iterator(); it.hasNext();) {
			Map.Entry entry = (Map.Entry) it.next();
			Object key = entry.getKey();
			Object value = entry.getValue();
			System.out.println(key + "=" + value);
			System.out.println("");
		}
	}

}

結果


実行結果は以下のとおりです。
class java.util.HashMap
3=うううううううううう
2=いいいいいいいいいい
1=ああああああああああ
0=んんんんんんんんんん
5=おおおおおおおおおお
4=ええええええええええ

class java.util.LinkedHashMap
3=うううううううううう
2=いいいいいいいいいい
1=ああああああああああ
0=んんんんんんんんんん
4=ええええええええええ
5=おおおおおおおおおお

class java.util.TreeMap
0=んんんんんんんんんん
1=ああああああああああ
2=いいいいいいいいいい
3=うううううううううう
4=ええええええええええ
5=おおおおおおおおおお
HashMapは4と5が逆になっていることから、順序が保たれていないことが分かりますね。
LinkedHashMapは追加した順序を保っています。
TreeMapは自動的にソートされていますね。

更新履歴

2013/03/12 新規作成


TOPJavaTIPS → This Page