Hatena::ブログ(Diary)

KnowledgeFort

2009-08-16

Map クラスがキーを保持する順序について

Map インタフェースの実装クラスである LinkedHashMap、TreeMap、HashMap がキーを保持する順序はそれぞれ以下の通りである。


LinkedHashMap:

キーを格納した順に保持。

TreeMap:

キーの昇順に保持。

HashMap:

順序を保持しない。


上記を実際にプログラムを作成して検証する。

まずは、以下のようなクラスを作成。


class MapLabo {
	
	MapLabo(Map<String, String> aMap) {
		this.map = aMap;
		return;
	}
	
	void putValue() {
		
		this.map.put("3", "みかん");
		this.map.put("1", "いちご");
		this.map.put("2", "りんご");
		this.map.put("6", "ぶどう");
		this.map.put("4", "だいこん?");
		this.map.put("5", "ばなな");
		
		return;
	}
	
	void dump() {
		
		System.out.println(this.map.getClass().getName() + " の内容:");
		
		Iterator<String> _ite = this.map.keySet().iterator();
		
		while (_ite.hasNext()) {
			String _key = _ite.next();
			System.out.println(_key + " :[" + this.map.get(_key) + "]");
		}
		
		System.out.println();
		
		return;
	}
	
	void experiment() {
		this.putValue();
		this.dump();
		return;
	}
	
	//*** メンバ変数
	private Map<String, String> map;
}

上記クラスは、コンストラクタにて Map クラスのインスタンスを受け取り、そのインスタンスに対して putValue() メソッドにてキーおよび値の追加を行い、dump() メソッドにてキーと値の組み合わせを標準出力に表示する。


呼び出す方法は以下の通り。


new MapLabo(new LinkedHashMap<String, String>()).experiment();
new MapLabo(new TreeMap<String, String>()).experiment();
new MapLabo(new HashMap<String, String>()).experiment();


実行結果は以下の通り。


java.util.LinkedHashMap の内容:
3 :[みかん]
1 :[いちご]
2 :[りんご]
6 :[ぶどう]
4 :[だいこん?]
5 :[ばなな]

java.util.TreeMap の内容:
1 :[いちご]
2 :[りんご]
3 :[みかん]
4 :[だいこん?]
5 :[ばなな]
6 :[ぶどう]

java.util.HashMap の内容:
3 :[みかん]
2 :[りんご]
1 :[いちご]
6 :[ぶどう]
5 :[ばなな]
4 :[だいこん?]

LinkedHashMap は格納した順番にキーを保持している。

TreeMap は昇順にキーを保持している。

HashMap の順序は不定であり、実行するたびに出力順序が異なる。

ななしななし 2011/04/24 17:38 わかりやすかったです。ありがとう(^_^)

t 2013/05/29 14:49 勉強になります。

774774 2014/04/15 10:35 いいね!

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/knowledgefort/20090816/1250401699