<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    重復容易,改變很難
    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 分享愛的空間 閱讀(1392) 評論(0)  編輯  收藏

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


    網站導航:
     

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

    常用鏈接

    留言簿(5)

    隨筆檔案

    文章檔案

    相冊

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲av片一区二区三区| 国产一级淫片a视频免费观看| 亚洲色自偷自拍另类小说| 国产成人高清亚洲一区91| 永久免费观看的毛片的网站| 麻豆亚洲AV成人无码久久精品 | 精品无码国产污污污免费网站| 亚洲AV无码久久精品成人| 免费A级毛片无码A∨| 亚洲欧洲精品在线| 久久综合AV免费观看| 色婷婷六月亚洲综合香蕉| 亚洲精品色婷婷在线影院| 国产亚洲精品免费视频播放| 亚洲av鲁丝一区二区三区| 亚洲免费观看在线视频| 亚洲人成网站免费播放| 亚洲国产精品成人| 免费91麻豆精品国产自产在线观看| 亚洲免费在线视频| 成人毛片免费播放| 特级毛片免费播放| 亚洲国产精品婷婷久久| 四虎成人精品一区二区免费网站| 特级毛片A级毛片100免费播放| 亚洲码国产精品高潮在线| 国产香蕉免费精品视频| 日韩色日韩视频亚洲网站| 国产国拍亚洲精品mv在线观看| 国产免费看JIZZ视频| 高清免费久久午夜精品| 亚洲精品视频在线观看免费| 日本高清免费不卡视频| 永久免费av无码网站yy| 亚洲入口无毒网址你懂的| 亚洲成A人片在线观看无码3D | 国内少妇偷人精品视频免费| 亚洲国产亚洲片在线观看播放| 免费无遮挡无码永久在线观看视频| 免费日本一区二区| 性色av极品无码专区亚洲|