zoukankan      html  css  js  c++  java
  • Map的基本用法

    HashMap

    • 键不可重复、允许key值为null,value也可以为null
     1  // HashMap 基本用法
     2  Map<String, String> hashMap = new HashMap<String, String>();
     3  
     4  // 给创建的hashMap 添加一个键值对
     5  hashMap.put("key1", "AAA");
     6  
     7  // 添加一个键值对,但是键已经在hashMap 中存在了,所以会把键为key1 的值覆盖掉
     8  hashMap.put("key1", "BBB");
     9  
    10  hashMap.put("key2", "CCC");
    11  hashMap.put("key3", "CCC");
    12  
    13  // 键值对都允许为null
    14  hashMap.put(null, "DDD");
    15  hashMap.put("key4", null);
    16  
    17  System.out.println(hashMap.toString());
    18  
    19  // 打印内容
    20  {key4=null, null=DDD, key3=CCC, key2=CCC, key1=BBB}
    • 底层hash 表
     1 // 继承关系
     2  public class HashMap<K,V> extends AbstractMap<K,V>
     3      implements Map<K,V>, Cloneable, Serializable {
     4      
     5      /* 基本属性 */
     6      static fi  nal int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 默认初始化大小16,扩容为当前容量翻倍
     7      static final float DEFAULT_LOAD_FACTOR = 0.75f;// 负载因子0.75
     8      transient int size;// 元素数量
     9      int threshold;// 判断是否需要调整hashmap 容量
    10      
    11  }

    备注:HashMap的扩容操作是一项很耗时的任务,所以如果能估算Map的容量,最好给它一个默认初始值,避免进行多次扩容。 

    • 线程不安全

      HashMap  的线程是不安全的,多线程环境中推荐是ConcurrentHashMap。

     

    丨HashTable

    • 键不可重复、不允许key值为null,value也不可以为null
     1 // HashTable 基本用法
     2  Map hashTable = new Hashtable();
     3  
     4  hashTable.put("key1", "AAA");
     5  hashTable              .put("key1", "BBB");
     6  hashTable.put("key2", "CCC");
     7  hashTable.put("key3", "CCC");
     8  
     9  // 键值对都不允许为null,会报错
    10  // hashTable.put(null, "value4");
    11  // hashTable.put("key5", null);
    12  
    13  System.out.println(hashTable.toString());
    14  
    15  
    16  // 打印内容
    17  {key3=value3, key2=value2, key1=value1}
    • 底层hash 表
     1 // 继承关系
     2  public class Hashtable<K,V>
     3      extends Dictionary<K,V>
     4      implements Map<K,V>, Cloneable, java.io.Serializable {
     5      
     6      private transient int count; // 元素数量,扩容为当前容量翻倍再加一
     7      private int threshold; // 判断是否需要调整hashtable 容量
     8          
     9      // 默认初始化大小11,负载因子0.75
    10      public Hashtable() {
    11          this(11, 0.75f);
    12     }
    13      
    14  }
    • 线程安全

    HashTable 实现方法上添加了synchronized 关键字来确保线程同步,所以相对于HashTable,HashMap的性能会高一些。例如:get 方法

    1 public synchronized V get(Object key) {
    2         // 省略代码
    3     }  

    丨TreeMap

    • 键不可重复,值可重复
     1 // TreeMap 基本用法
     2   Map<String, String> treeMap = new TreeMap<String, String>();
     3  
     4  treeMap.put("key1", "AAA");
     5  
     6  // 会覆盖掉key1 之前的AAA 值为BBB
     7  treeMap.put("key1", "BBB");
     8  
     9  // 允许值重复
    10  treeMap.put("key2", "CCC");
    11  treeMap.put("key3", "CCC");
    12  
    13  // 允许值为null
    14  treeMap.put("key4", null);
    15  
    16  // 不允许键为null,会报错
    17  //treeMap.put(null, "DDD");
    18  
    19  System.out.println(treeMap.toString());
    20  
    21  
    22  // 打印内容
    23  {key1=BBB, key2=CCC, key3=CCC, key4=null}
    • 底层二叉树
    1 // 继承关系
    2  public class TreeMap<K,V>
    3      extends AbstractMap<K,V>
    4      implements NavigableMap<K,V>, Cloneable, java.io.Serializable{
    5  }      

    本篇针对map 的基础用法进行了讲解,后续我会对map 进行深入讲解。

    下方是我的公众号,回复 “666” 领取超多面试资料!!!

  • 相关阅读:
    Reporting Service筛选器的作用
    asp.net很好用的编辑器
    Filter函数详析
    很好用的模态弹出窗口,可自定义弹出窗口外观
    asp.net 3.5异步调用方法小结
    C#面向对象的一个简单例子,继承、接口、重写都用上了,还用到了工厂模式
    漂亮的ajax图片切换
    asp.net大文件上传组件
    jQuery中文入门指南,翻译加实例,jQuery的起点教程(转)
    DirectoryEntry的使用
  • 原文地址:https://www.cnblogs.com/xxss/p/13234095.html
Copyright © 2011-2022 走看看