05/09/11 11:23 pm

map.entrySetメソッドによる処理の改善

はじめに

FindBugsというツールを使っていて分かった事。map#entrySetを使うとパフォーマンスが良い。

 

ソースコード

/*
 * $Id: MapEntryLooping.java 1056 2005-09-11 14:23:25Z s-okita $
 *
 * Copyright 2005 satoshiokita. All rights reserved.
 */
package org.oklab.tips;

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

/**
 * java.util.MapのkeySetよりentrySetの方が効率が良いので
 * サンプルを書く。
 * @author satoshiokita
 */
public class MapEntryLooping {

	public static void main(String[] args) {
		
		// テストデータ
		Map maps = new HashMap();
		maps.put("AA", "1");
		maps.put("BB", "2");
		maps.put("CC", "3");
		
		iterateKeySet(maps);
		iterateEntrySet(maps);
	}

	/**
	 * map#keySetを実行する
	 * @param maps
	 */
	private static void iterateKeySet(Map maps) {
		// keySetメソッドを使っている。
		// この時キー値の格納処理を内部で行っている。
		Iterator it = maps.keySet().iterator();
		
		while (it.hasNext()) {
			// キーを取り出す。
			String key = (String) it.next();
			// 値を取り出すが、この時走査している。
			String value = (String) maps.get(key);
			
			System.out.println(key + ":" + value);
		}
	}
	
	/**
	 * map#entrySetを実行する
	 * @param maps
	 */
	private static void iterateEntrySet(Map maps) {
		Iterator it = maps.entrySet().iterator();
		while (it.hasNext()) {
			Map.Entry entry = (Map.Entry) it.next();
			
			String key = (String) entry.getKey();
			
			// iterateKeySetの処理とは異なり
			// 此処で走査の処理が入らないため効率が良い
			String value = (String) entry.getValue();
			
			System.out.println(key + ":" + value);
		}
	}
}