スポンサーリンク

このドキュメントの内容は、以下の通りです。

はじめに


この記事では、JavaMapの使い方について解説します。 Map は、キーとバリューのペアを扱えるクラスです。

コレクションとは


Java には、コレクションクラスと呼ばれるクラスがあります。
コレクションには、以下があります。

  • マップ (Map)
  • セット (Set)
  • リスト (List)

Map とは


Mapはオブジェクトに名前(キー)をつけて管理することができます。
Mapには、同一のキーを複数登録することができません。
キーから値(バリュー)を参照します。

Mapを操作するための基本的なメソッド


Mapを操作するための基本的なメソッドには、以下のメソッドがあります。
メソッド名説明
get(key) keyの値を取り出す
put(key,value) key=valueを追加する
keySet() KeyのSetを返す
values() Mapに含まれる値のCollectionを返す
entrySet() Mapに含まれるKeyと値のSetを返す
remove(key) 一致するkeyを削除する
containsKey(key) keyが存在するか確認する
containsValue(value) 指定した値が存在するか確認する
isEmpty() Map がkeyと値のマップを保持しない場合はtrueを返す
size() key=valueの個数
clear() key=valueをすべて削除する

Mapのサンプルコード


Mapのサンプルコードを以下に示します。

import java.util.Map;
public class JavaTest1 {
	static public void main(String[] arg){
		Map<String, String> hm = new HashMap();

		setData(hm);

		System.out.println(hm.get("3")); // key=3の値を取り出す
		System.out.println(hm.containsKey("3")); // key=3があるか?
		System.out.println("HashMap: " + hm);
		System.out.println("HashMap size: " + hm.size());

		hm.remove("3"); // key=3を削除する
		System.out.println(hm.containsKey("3")); // key=3があるか?前の行で消したので、もうない
		System.out.println("HashMap: " + hm);
		System.out.println("HashMap size: " + hm.size());

		System.out.println(hm.remove("1")); // 100が表示される
		System.out.println(hm.remove("9999")); // key=9999は存在しないため null
	}
	static private void setData(Map<String,String> m){

		m.put("2", "200");
		m.put("3", "300");
		m.put("1", "100");
		m.put("5", "a");
		m.put("6", "b");
		m.put("4", "c");
	}
}

実行結果

以下は、サンプルプログラムの実行結果です。
true
HashMap: {3=300, 5=a, 2=200, 4=c, 6=b, 1=100}
HashMap size: 6
false
HashMap: {5=a, 2=200, 4=c, 6=b, 1=100}
HashMap size: 5
100
null

重複したキーを追加した場合


Map では、同じキーを複数もつことはできません。
Map では、重複したキーを追加しようとした場合は、同じキーの値(バリュー)が上書きされます。すでに存在するキーに対して、 put()を実行した場合、後からput()した値(value)が古い値を上書きします。
m.put("2", "200");
m.put("2", "abc"); // 200を上書きします。

拡張for でMapを表示する方法


Java の 拡張forを利用して、Map をループさせる方法を紹介します。
/*
 * hashmap_for_ex1.java
 * Copyright (C) 2020 kaoru
 */
import java.util.Map;
import java.util.HashMap;
public class hashmap_for_ex1
{
	public static void main(String[] args) {
		HashMap<Integer, String> map = new HashMap<>();
		map.put(1, "foo");
		map.put(2, "bar");
		map.put(3, "hoge");

		for(Map.Entry<Integer, String> e : map.entrySet() ) {
			System.out.println(e);
		}
	}
}


コンパイルと実行例は、以下の通りです。
% javac hashmap_for_ex1.java
% java hashmap_for_ex1
1=foo
2=bar
3=hoge

foreach とラムダ式でMapを表示する方法


forEach を使って、Map の内容を表示する例です。
拡張forを利用するよりも、タイプ量が少なくて済むため、こちらのほうが簡単かもしれません。

/*
 * hashmap_foreach1.java
 * Copyright (C) 2015 kaoru
 */
import java.util.HashMap;
public class hashmap_foreach1
{
	public static void main(String[] args) {
		HashMap<Integer, String> map = new HashMap<>();
		map.put(1, "foo");
		map.put(2, "bar");
		map.put(3, "hoge");

		map.forEach( (key, value) -> System.out.println(key + " " + value ) );
	}
}

そのほかの方法


[[2008-04-11-1]] では、Map を Iterator で扱う方法を紹介しています。

[[2008-04-10-2]] では、Java Map クラスの違い HashMap Hashtable TreeMap LinkedHashMapを紹介しています。
参照しているページ (サイト内): [2008-04-11-1] [2008-04-10-2]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー