<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的內(nèi)存。
    如果要試驗其代碼,要采用這種方式運行:java -Xms128M -Xmx250M TestMap
    1,對內(nèi)存容量的要求
    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.遍歷比較
    我在試驗中,發(fā)現(xiàn)我們經(jīng)常采用遍歷List的方式是一個錯誤的遍歷方式,其性能其差無比。我們經(jīng)常遍歷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,其性能在一百萬條數(shù)據(jù)中無多大差別。其實例代碼如下:

    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)  編輯  收藏

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


    網(wǎng)站導航:
     

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

    常用鏈接

    留言簿(5)

    隨筆檔案

    文章檔案

    相冊

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲成人免费网址| 亚洲AV无码片一区二区三区| 国产AV无码专区亚洲AV琪琪 | 亚洲精品不卡视频| 无遮挡国产高潮视频免费观看| 免费在线观影网站| 最近2019中文免费字幕| 亚洲AV无码一区二区二三区入口| 国产91在线|亚洲| a毛看片免费观看视频| 亚洲一区二区三区在线视频| 亚洲人成色777777老人头| 精品成在人线AV无码免费看 | 亚洲黄色三级视频| 国产偷国产偷亚洲高清在线| 18禁止看的免费污网站| 国产成人麻豆亚洲综合无码精品| 亚洲av成人综合网| 99热免费在线观看| 亚洲av无码一区二区三区乱子伦| 三级黄色在线免费观看| 日本一道一区二区免费看| 亚洲成AV人片在线观看| 免费网站观看WWW在线观看| 伊人久久大香线蕉亚洲| 在线观看免费黄色网址| 亚洲国产成人高清在线观看| 久久精品国产免费一区| 亚洲av无码乱码国产精品fc2| 国产无遮挡无码视频免费软件| 九月丁香婷婷亚洲综合色| 一级毛片在线观看免费| 亚洲电影免费在线观看| 免费在线观看的网站| 国产成人高清亚洲一区91| 亚洲AV无码专区国产乱码4SE| 免费人成视频在线| 国产高清对白在线观看免费91 | 3d动漫精品啪啪一区二区免费| 亚洲人成电影网站免费| 亚洲精品成人片在线播放 |