由HashMap的遍历看android的优化
android的程序编写大部分时候都是用java,而android设备的性能多不是很高,所以对代码的优化是十分重要的,其中许多的优化技巧是可以从以往的PC平台JAVA优化技巧借鉴的。但是由于PC平台和嵌入式平台的硬件架构的巨大区别,导致盲目的采用以往的JAVA经验来优化android的代码可能会产生适得其反的后果。
本文将就HashMap的遍历对这个问题进行一个初步的讨论。47K是新手程序猿,因此写的东西难免有所错漏,请您不吝赐教
HashMap的遍历主要由两种方式:
Solution I
Map map = new HashMap(); Iterator iter = map.keySet().iterator(); while (iter.hasNext()) { Object key = iter.next(); Object val = map.get(key); }
Map map = new HashMap(); Iterator iter = map.keySet().iterator(); while (iter.hasNext()) { Object key = iter.next(); Object val = map.get(key); }
import java.io.ObjectInputStream.GetField;import java.util.HashMap;import java.util.Iterator;/** * @Title: test.java * @Package * @Description: TODO(用一句话描述该文件做什么) * @author no47wk lotp,Come back * @date 2012-7-14 上午11:02:23 * @version V1.0 *//** * @ClassName: test * @Description: TODO(这里用一句话描述这个类的作用) * @author no47wk lotp,Come back * @date 2012-7-14 上午11:02:23 */public class test { public static void main(String[] args) { test t=new test(); t.KeySet(); t.EntrySet(); } private void KeySet() { HashMap<String, String> map = getData(); Iterator<String> ite = map.keySet().iterator(); long start = System.currentTimeMillis(); while (ite.hasNext()) { map.get(ite.next()); } long end = System.currentTimeMillis(); long time = end - start; System.out.println("KeySet " + time + ""); } private void EntrySet() { HashMap<String, String> map = getData(); Iterator<java.util.Map.Entry<String, String>> ite = map.entrySet() .iterator(); java.util.Map.Entry<String, String> entry; long start = System.currentTimeMillis(); while (ite.hasNext()) { entry = ite.next(); entry.getKey(); entry.getValue(); } long end = System.currentTimeMillis(); long time = end - start; System.out.println("EntrySet " + time + ""); } private HashMap<String, String> getData() { HashMap<String, String> ret = new HashMap<String, String>(); int i = 0; while (i < 10000000) { ret.put(String.valueOf(i), "a"); i++; } return ret; }}
/** * @Title: Test.java * @Package com.lotp.Test * @Description: TODO(用一句话描述该文件做什么) * @author no47wk lotp,Come back * @date 2012-7-14 上午10:43:22 * @version V1.0 */package com.lotp.Test;import java.util.HashMap;import java.util.Iterator;import android.app.Activity;import android.os.Bundle;import android.os.DropBoxManager.Entry;import android.util.Log;/** * @ClassName: Test * @Description: TODO(这里用一句话描述这个类的作用) * @author no47wk lotp,Come back * @date 2012-7-14 上午10:43:22 */public class Test extends Activity { private HashMap<String, String> map; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); long start = System.currentTimeMillis(); map = getData(); KeySet(); EntrySet(); } private void KeySet(){ Iterator<String> ite = map.keySet().iterator(); long start=System.currentTimeMillis(); while (ite.hasNext()) { map.get(ite.next()); } long end = System.currentTimeMillis(); Log.d("KeySet", end - start + " "); } private void EntrySet(){ Iterator<java.util.Map.Entry<String, String>> ite=map.entrySet().iterator(); java.util.Map.Entry<String, String> entry; long start=System.currentTimeMillis(); while(ite.hasNext()){ entry=ite.next(); entry.getKey(); entry.getValue(); } long end=System.currentTimeMillis(); Log.d("EntrySet", end-start+""); } private HashMap<String, String> getData() { HashMap<String, String> ret = new HashMap<String, String>(); int i = 0; while (i < 102400) { ret.put(String.valueOf(i), "a"); i++; } return ret; }}