athrunwang

          紀元
          數(shù)據(jù)加載中……
          LinkedHashMap/HashMap(數(shù)?據(jù)?緩?存?準?備?)

          顧名思義LinkedHashMap是比HashMap多了一個鏈表的結構。與HashMap相比LinkedHashMap維護的是一個具有雙重鏈表的HashMap,LinkedHashMap支持2中排序一種是插入排序,一種是使用排序,最近使用的會移至尾部例如 M1 M2 M3 M4,使用M3后為 M1 M2 M4 M3了,LinkedHashMap輸出時其元素是有順序的,而HashMap輸出時是隨機的,如果Map映射比較復雜而又要求高效率的話,最好使用LinkedHashMap,但是多線程訪問的話可能會造成不同步,所以要用Collections.synchronizedMap來包裝一下,從而實現(xiàn)同步。其實現(xiàn)一般為: 
              Map<String String> map = Collections.synchronizedMap(new LinkedHashMap(<String String));

          HashMap,LinkedHashMap,TreeMap都屬于Map

          Map 主要用于存儲鍵(key)值(value)對,根據(jù)鍵得到值,因此鍵不允許鍵重復,但允許值重復。

          HashMap 是一個最常用的Map,它根據(jù)鍵的HashCode 值存儲數(shù)據(jù),根據(jù)鍵可以直接獲取它的值,具有很快的訪問速度。HashMap最多只允許一條記錄的鍵為Null;允許多條記錄的值為 Null;HashMap不支持線程的同步,即任一時刻可以有多個線程同時寫HashMap;可能會導致數(shù)據(jù)的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力。

          LinkedHashMap LinkedHashMap也是一個HashMap,但是內部維持了一個雙向鏈表,可以保持順序

          TreeMap 不僅可以保持順序,而且可以用于排序

          HashMap例子:

              public static void main(String[] args) {
          Map<String, String> map = new HashMap<String, String>();
          map.put("a3", "aa");
          map.put("a2", "bb");
          map.put("b1", "cc");
          for (Iterator iterator = map.values().iterator(); iterator.hasNext();) {
          String name = (String) iterator.next();
          System.out.println(name);
          }
          }

          LinkedHashMap例子:

              public static void main(String[] args) {
          Map<String, String> map = new LinkedHashMap<String, String>();
          map.put("a3", "aa");
          map.put("a2", "bb");
          map.put("b1", "cc");
          for (Iterator iterator = map.values().iterator(); iterator.hasNext();) {
          String name = (String) iterator.next();
          System.out.println(name);
          }
          }

          TreeMap例子:

              public static void main(String[] args) {
          Map<String, String> map = new TreeMap<String, String>(new Comparator<Object>(){
          Collator collator = Collator.getInstance();
          public int compare(Object o1, Object o2) {
          CollationKey key1 = collator.getCollationKey(o1.toString());
          CollationKey key2 = collator.getCollationKey(o2.toString());
          return key1.compareTo(key2);
          //return collator.compare(o1, o2);
          }});
          map.put("a3", "aa");
          map.put("a2", "bb");
          map.put("b1", "cc");
          for (Iterator iterator = map.values().iterator(); iterator.hasNext();) {
          String name = (String) iterator.next();
          System.out.println(name);
          }
          }

          運行這三個例子,體會一下它們之間的區(qū)別。

          posted on 2011-11-18 10:30 AthrunWang 閱讀(169) 評論(0)  編輯  收藏


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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 和田市| 苍梧县| 凭祥市| 榆树市| 韩城市| 滁州市| 荆州市| 镇安县| 务川| 寻甸| 盐津县| 西吉县| 疏勒县| 布拖县| 阜阳市| 象山县| 阿拉善盟| 太和县| 宁武县| 华池县| 渑池县| 尚志市| 临潭县| 阳东县| 柳河县| 都兰县| 伊川县| 榆中县| 上虞市| 定日县| 安福县| 长顺县| 麦盖提县| 农安县| 蒙城县| 南丰县| 惠东县| 怀集县| 桂东县| 梧州市| 莱州市|