[java]拡張for と while の比較
10000要素を持つマップオブジェクトを1000回参照すると、0.1秒くらい差が出ました。
拡張for: 2156(ms)
while: 2250(ms)
なんだ、拡張for速いじゃん。
Intel Core2 Duo 2.4GHz、メモリ2GB、WindowsXP SP2上にVMWareServerを起動。
VMWareServer上に構築したWindowXP SP2環境にて実施。
import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; /** * マップに関するサンプルクラス * @author kazuki-kido */ public class MapSample { /** * マップ参照サンプル * @param args */ public static void main(String[] args){ Map<String, String> map = new LinkedHashMap<String, String>(); // マップオブジェクトに値をセット for(int i=0; i<10000; i++){ map.put(i + "回目", String.valueOf(i)); } long start, end; StringBuilder temp; // 拡張for start = System.currentTimeMillis(); for(int i=0; i<1000; i++){ temp = new StringBuilder(); for(String key : map.keySet()){ temp.append(key).append(map.get(key)); } } end = System.currentTimeMillis(); System.out.println("拡張for: " + (end - start) + "(ms)"); // while start = System.currentTimeMillis(); for(int i=0; i<1000; i++){ Set<String> set = map.keySet(); Iterator<String> iterator = set.iterator(); temp = new StringBuilder(); while(iterator.hasNext()){ String key = iterator.next(); temp.append(key).append(map.get(key)); } } end = System.currentTimeMillis(); System.out.println("while: " + (end - start) + "(ms)"); } }