zoukankan      html  css  js  c++  java
  • hashMap 和 linkedHashMap 的区别和联系

    直接举例说明。

    运行如下例子程序

     1 mport java.util.HashMap;
     2 import java.util.Iterator;
     3 import java.util.LinkedHashMap;
     4 import java.util.Map;
     5 
     6 /**
     7  * Created by longger on 2017/11/16.
     8  */
     9 public class AboutMap {
    10 
    11     public static void main(String[] args) {
    12         Map<String,String> linkedHashMap = new LinkedHashMap<>();
    13         linkedHashMap.put("100","屠龙");
    14         linkedHashMap.put("22","倚天");
    15         linkedHashMap.put("1","zzz");
    16         System.out.println("***************LinkedHashMap****************");
    17 
    18         for(Iterator it = linkedHashMap.keySet().iterator();it.hasNext();){
    19             Object key = it.next();
    20             System.out.println(key + "=" + linkedHashMap.get(key));
    21         }
    22 
    23         Map<String,String> map = new HashMap<>();
    24         map.put("100","屠龙");
    25         map.put("22","倚天");
    26         map.put("1","zzz");
    27 
    28         System.out.println("*********HashMap*****");
    29         for(Iterator it = map.keySet().iterator();it.hasNext();){
    30             Object key = it.next();
    31             System.out.println(key + "=" + map.get(key));
    32         }
    33     }
    34 }

    运行结果:

    ***************LinkedHashMap****************
    100=屠龙
    22=倚天
    1=zzz
    *********HashMap*****
    22=倚天
    100=屠龙
    1=zzz

    从结果来分析,hashMap 存储数据不是顺序存储的,存储位置并不确定。

    linkedHashMap 存储数据,数据位置不会发生变化。

    作为拓展,可以继续理解Map.

    map这个接口有四个实现类,分别是 HashMap 、HashTable、LinkedHashMap、TreeMap。

    HashMap,存储键值对。根据键得到值,因此不允许键(key)重复,值(value)可以重复。

    HashMap 的 特点:

    1.HashMap 具有很快的访问速度。 put进去的数据,存储位置是不确定的。

    2.hashMap 键 key 是唯一的,不允许重复,并且 只允许一个key 为 null.允许 多个value 值相同,且为null.

    3.HashMap 不是同步的,即多个进程同事操作HashMap 会产生数据不一致的问题。是HashMap 同步 可以 使用 Collections的synchronizedMap 方法,对hashMap 进行转换处理,使其拥有同步能力。或者直接使用 ConcurrentHashMap。

    HashTable的特点

    HashTable 和 HashMap 都是继承 Dictionary 类。方法和属性一致。

    区别在于:

    1.HashTable 不允许 key 或者 value 为 null.

    2.HashTable 是线程同步的,因此在写入时,速度会慢一些。

    LinkedHashMap 特点

    LinkedHashMap是 HashMap的一个子类。对HashMap的一个拓展。

    1.linkedHashMap 保存了记录的存储顺序。在使用 iterator 遍历是,先输出的是先 put进去的记录。

    2.遍历时,会比HashMap慢。但是,在一种情况下例外,HashMap容量很大,里面的实际数据不是很多,LinkedHashMap遍历速度会快些。这是因为LinkedHashMap遍历数据时,只关注实际存在的数据,和容量大小无关。

    TreeMap

    TreeMap 实现了SortMap 接口。

    TreeMap,对存储的数据,会按照Key 进行排序。默认是按照key值升序排序。也可以指定比较器。当使用Iterator遍历时,得到的结果是排序后的结果。

    总结:

    选择了一个满足功能的数据结构之后,然后关注点就在于效率。

    异步和排序都会影响速度。异步会影响数据的存取速度。排序会影响数据的遍历速度。

    因此,在没有同步和排序情况下面,用的最多是HashMap,它存储速度快。如果要求数据存入顺序和输出顺序一致,可以使用linkedHashMap。如果对数据需要进行排序,可以使用TreeMap.用到同步是而且要求存入的数据不能有null值,可以使用HashTable。

  • 相关阅读:
    cocos2d-x 2.2 study ------------------------ 双击事件(转)
    cocos2d-x打包Android
    cocos2d-x在win7下的android交叉编译环境
    Cocos2d-x之CCImage深入分析
    Eclipse开发C/C++之使用技巧小结
    TortoiseSVN安装使用
    cocos2d-x 2.2 study ------------------------ CCCallFunC家族
    cocos2d-x改底层之动态改变UIListView中的某项在链表中的位置
    汇编语言,以10进制的方式显示数字
    JVM
  • 原文地址:https://www.cnblogs.com/regnol/p/7847257.html
Copyright © 2011-2022 走看看