zoukankan      html  css  js  c++  java
  • 关于HashMap、LinkedHashMap与TreeMap

    HashMap是无序的,HashMap在put的时候是根据key的hashcode进行hash然后放入对应的地方。所以在按照一定顺序put进HashMap中,然后遍历出HashMap的顺序跟put的顺序不同(除非在put的时候key已经按照hashcode排序号了,这种几率非常小)

    单纯的HashMap是无法实现排序的,这的排序是指,我们将键值对按照一定的顺序put进HashMap里,然后在进行取键值对的操作的时候,是按照put进去的顺序把键值对取出来的。

    JAVAJDK1.4以后提供了LinkedHashMap来帮助我们实现了有序的HashMap

    LinkedHashMap取键值对时,是按照你放入的顺序来取的。

    顾名思义LinkedHashMap是比HashMap多了一个链表的结构。与HashMap相比LinkedHashMap维护的是一个具有双重链表的HashMap,LinkedHashMap支持2中排序一种是插入排序,一种是使用排序,最近使用的会移至尾部例如 M1 M2 M3 M4,使用M3后为 M1 M2 M4 M3了,LinkedHashMap输出时其元素是有顺序的,而HashMap输出时是随机的,如果Map映射比较复杂而又要求高效率的话,最好使用LinkedHashMap,但是多线程访问的话可能会造成不同步,所以要用Collections.synchronizedMap来包装一下,从而实现同步。其实现一般为:
        Map<String String> map = Collections.synchronizedMap(new LinkedHashMap(<String String));

    HashMap,LinkedHashMap,TreeMap都属于Map

    Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复。

    HashMap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力。
    LinkedHashMap LinkedHashMap也是一个HashMap,但是内部维持了一个双向链表,可以保持顺序
    TreeMap 不仅可以保持顺序,而且可以用于排序
    View Code
     1 import java.text.CollationKey;
    2 import java.text.Collator;
    3 import java.util.Comparator;
    4 import java.util.HashMap;
    5 import java.util.Iterator;
    6 import java.util.LinkedHashMap;
    7 import java.util.Map;
    8 import java.util.TreeMap;
    9
    10 public class HashMapLinkedHashMap
    11 {
    12 public static void main(String args[])
    13 {
    14 System.out.println("*************************LinkedHashMap*************");
    15 Map<String,String> linkedHashMap = new LinkedHashMap<String,String>();
    16 linkedHashMap.put("3", "apple");
    17 linkedHashMap.put("2", "pear");
    18 linkedHashMap.put("4", "origane");
    19 linkedHashMap.put("1","banana");
    20
    21 for (Iterator it = linkedHashMap.keySet().iterator();it.hasNext();)
    22 {
    23 Object key = it.next();
    24 System.out.println( key+"="+ linkedHashMap.get(key));
    25 }
    26
    27 System.out.println("*************************HashMap*************");
    28 Map<String,String> haspMap = new HashMap<String,String>();
    29 haspMap.put("3", "apple");
    30 haspMap.put("2", "pear");
    31 haspMap.put("4", "origane");
    32 haspMap.put("1","banana");
    33 for (Iterator it = haspMap.keySet().iterator();it.hasNext();)
    34 {
    35 Object key = it.next();
    36 System.out.println( key+"="+ haspMap.get(key));
    37 }
    38
    39 System.out.println("*************************TreeMap*************");
    40 Map<String,String> treeMap = new TreeMap<String, String>(
    41 new Comparator<Object>()
    42 {
    43 Collator collator = Collator.getInstance();
    44 public int compare(Object o1,Object o2)
    45 {
    46 CollationKey key1 = collator.getCollationKey(o1.toString());
    47 CollationKey key2 = collator.getCollationKey(o2.toString());
    48 return key1.compareTo(key2);
    49 }
    50 });
    51 treeMap.put("3", "apple");
    52 treeMap.put("2", "pear");
    53 treeMap.put("4", "origane");
    54 treeMap.put("1","banana");
    55 for (Iterator it = treeMap.keySet().iterator();it.hasNext();)
    56 {
    57 Object key = it.next();
    58 System.out.println( key+"="+ treeMap.get(key));
    59 }
    60
    61 }
    62
    63
    64 }

    运行结果:

    *************************LinkedHashMap*************
    3=apple
    2=pear
    4=origane
    1=banana
    *************************HashMap*************
    3=apple
    2=pear
    1=banana
    4=origane
    *************************TreeMap*************
    1=banana
    2=pear
    3=apple
    4=origane




  • 相关阅读:
    javascript:;禁用a标签默认功能的缺点。
    chrome中image图片预留位置的问题
    line-height和vertical-algin
    关于font-size对垂直居中影响的问题
    网络OSI七层模型及各层作用 与 TCP/IP
    NB-IoT,LoRA,WIFI,蓝牙,Zigbee,MQTT,CoAP之间的关系
    常见的十大物联网通讯技术优劣及应用场景
    物联网的七大通信协议
    设备树DTS 学习:学习总结
    设备树DTS 学习:Linux DTS文件加载过程
  • 原文地址:https://www.cnblogs.com/paulbai/p/2417506.html
Copyright © 2011-2022 走看看