重復容易,改變很難
          java,,,不錯的玩具
          posts - 21,  comments - 42,  trackbacks - 0

          說明:我所涉及到的試驗代碼,均是針對于1百萬條記錄,我的硬件配置如下:CPUP4 1.5G,256M DDR的內存。
          如果要試驗其代碼,要采用這種方式運行:java -Xms128M -Xmx250M TestMap
          1,對內存容量的要求
          Map對象高于List。因為Map除了Value外還需要一個Object的Key,從而增大了Map的容量。試驗代碼如下:

          import java.util.*;
          public class TestMap { 
                public static void main(String[] args) { 
                      System.out.println("begin>>>>>>>>>>>>>>"); 
                      long sm = Runtime.getRuntime().totalMemory(); 
                      System.out.println("Begin Memory :" + sm); 
                      Map m = new Hashtable(); 
                      //LinkedList tmpList = new LinkedList(); 
                      for (int i=0;i<1000000;i++) { 
                            m.put(""+i,"i=" + i); 
                            //Integer integer = new Integer(i); 
                            //tmpList.add(integer); 
                      } 
                      long em = Runtime.getRuntime().totalMemory(); 
                      System.out.println("End Memory :" + em); 
                      System.out.println("End-Start Memory :" + (em - sm)); 
                      //walkList(tmpList); 
                      System.out.println("<<<<<<<<<<<<<<<<end"); 
                      //find(m,"985757"); 
                      walkMap(m); 
                      //List tmpList = new LinkedList(); 
                      //tmpList.addAll(m.values()); 
                  } 
                }

          其對比結果如下:1百萬條記錄Map大概需要70M額外空間,而List不需要,其額外空間為0
          2.遍歷比較
          我在試驗中,發現我們經常采用遍歷List的方式是一個錯誤的遍歷方式,其性能其差無比。我們經常遍歷List代碼實例如下: 

                for(int i = 0;i<list.size();i++) { 
                      Object obj = list.get(i); 
                }

          如果List的遍歷方式換一種方式,其性能和Map差不多,我們將上面的代碼進行擴充,從而來比較Map和List的遍歷速度:

          import java.util.*;
          /**
          * @author whxu
          * @version 1.0.0 2003-4-22 AM
          */
          public class TestMap { 
                public static void main(String[] args) { 
                      System.out.println("begin>>>>>>>>>>>>>>"); 
                      long sm = Runtime.getRuntime().totalMemory(); 
                      System.out.println("Begin Memory :" + sm); 
                      Map m = new Hashtable(); 
                      //LinkedList tmpList = new LinkedList(); 
                      for (int i=0;i<1000000;i++) { 
                            m.put(""+i,"i=" + i); 
                            //Integer integer = new Integer(i); 
                            //tmpList.add(integer); 
                      } 
                      long em = Runtime.getRuntime().totalMemory(); 
                      System.out.println("End Memory :" + em); 
                      System.out.println("End-Start Memory :" + (em - sm)); 
                      //walkList(tmpList); 
                      System.out.println("<<<<<<<<<<<<<<<<end"); 
                      //find(m,"985757"); 
                      walkMap(m); 
                      //List tmpList = new LinkedList(); 
                      //tmpList.addAll(m.values()); 
                } 
                public static void find(Map m,String key) { 
                      long st = System.currentTimeMillis(); 
                      Object obj = m.get(key); 
                      System.out.println("Object:" + obj); 
                      long et = System.currentTimeMillis(); 
                      System.out.println("Start Time:" + st); 
                      System.out.println("End Time:" + et); 
                      System.out.println("Use Time:" + (et - st)); 
                } 
                public static void walkMap(Map m) { 
                      long st = System.currentTimeMillis(); 
                      for(Iterator it = m.values().iterator();it.hasNext();) { 
                            Object obj = it.next(); 
                      } 
                      long et = System.currentTimeMillis(); 
                      System.out.println("WalkMap Start Time:" + st); 
                      System.out.println("WalkMap End Time:" + et); 
                      System.out.println("WalkMap Use Time:" + (et - st)); 
                   } 
                   public static void walkList(LinkedList l) { 
                           long st = System.currentTimeMillis(); 
                           Object obj = null; 
                         //System.out.println(l.get(3434)); 
                         /*這種遍歷方式的性能其差無比,建議不要使用 
                         for(int i=0;i<l.size();i++) { 
                             obj = l.get(i); 
                         } 
                         */ 
                         for(Iterator it = l.iterator();it.hasNext();) { 
                             obj = it.next(); 
                            } 
                            long et = System.currentTimeMillis(); 
                            System.out.println("WalkList Start Time:" + st); 
                            System.out.println("WalkList End Time:" + et); 
                         System.out.println("WalkList Use Time:" + (et - st)); 
                     }
           }

          3.隨機查找。如果Map知道了Key,List知道了index,其性能在一百萬條數據中無多大差別。其實例代碼如下:

          import java.util.*;
          /**
          * @author whxu
          * @version 1.0.0 2003-4-22 AM
          */
          public class TestMap
          {
          public static void main(String[] args)
          {
          System.out.println("begin>>>>>>>>>>>>>>");
          long sm = Runtime.getRuntime().totalMemory();
          System.out.println("Begin Memory :" + sm);
          Map m = new Hashtable();
          LinkedList tmpList = new LinkedList();
          for (int i=0;i<1000000;i++) {
          //m.put(""+i,"i=" + i);
          tmpList.add("i=" + i);
          }
          long em = Runtime.getRuntime().totalMemory();
          System.out.println("End Memory :" + em);
          System.out.println("End-Start Memory :" + (em - sm));
          //walkList(tmpList);
          System.out.println("<<<<<<<<<<<<<<<<end");
          //find(m,"985757");
          find(tmpList,1000000-1);
          //walkMap(m);
          //List tmpList = new LinkedList();
          //tmpList.addAll(m.values());
          }
          public static void find(Map m,String key) {
          long st = System.currentTimeMillis();
          Object obj = m.get(key);
          System.out.println("Find Map Object:" + obj);
          long et = System.currentTimeMillis();
          System.out.println("Find Map Start Time:" + st);
          System.out.println("Find Map End Time:" + et);
          System.out.println("Find Map Use Time:" + (et - st));
          }
          public static void find(List l,int index) {
          long st = System.currentTimeMillis();
          Object obj = l.get(index);
          System.out.println("Find List Object:" + obj);
          long et = System.currentTimeMillis();
          System.out.println("Find List Start Time:" + st);
          System.out.println("Find List End Time:" + et);
          System.out.println("Find List Use Time:" + (et - st));
          }
          public static void walkMap(Map m) {
          long st = System.currentTimeMillis();
          for(Iterator it = m.values().iterator();it.hasNext();) {
          Object obj = it.next();
          }
          long et = System.currentTimeMillis();
          System.out.println("WalkMap Start Time:" + st);
          System.out.println("WalkMap End Time:" + et);
          System.out.println("WalkMap Use Time:" + (et - st));
          }
          public static void walkList(LinkedList l) {
          long st = System.currentTimeMillis();
          Object obj = null;
          //System.out.println(l.get(3434));
          /*for(int i=0;i<l.size();i++) {
          obj = l.get(i);
          }
          */
          for(Iterator it = l.iterator();it.hasNext();) {
          obj = it.next();
          }
          long et = System.currentTimeMillis();
          System.out.println("WalkList Start Time:" + st);
          System.out.println("WalkList End Time:" + et);
          System.out.println("WalkList Use Time:" + (et - st));
          }
          }

          posted on 2007-06-02 11:35 分享愛的空間 閱讀(1393) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          <2007年6月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          常用鏈接

          留言簿(5)

          隨筆檔案

          文章檔案

          相冊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 陵水| 鄂托克旗| 玛沁县| 衡南县| 太湖县| 抚州市| 思茅市| 枣庄市| 应用必备| 铜山县| 太湖县| 清远市| 南宁市| 稻城县| 东莞市| 资源县| 贵州省| 通许县| 洮南市| 宁夏| 广平县| 策勒县| 老河口市| 上思县| 塔河县| 从江县| 嘉鱼县| 台中市| 揭西县| 乌鲁木齐市| 客服| 大渡口区| 太仆寺旗| 西和县| 樟树市| 唐河县| 江口县| 思茅市| 榆林市| 林芝县| 砚山县|