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” 领取超多面试资料!!!

  • 相关阅读:
    ffmpeg rtmp推流 视频转码
    java日志发展史 log4j slf4j log4j2 jul jcl 日志和各种桥接包的关系
    nginx stream 流转发,可以转发rtmp、mysql访问流,转发rtmp、jdbc请求
    java web http 转https 通过nginx代理访问
    linux 服务器磁盘挂载
    novnc 通过websockify代理 配置多点访问
    linux 文件服务 minio 安装部署配置
    AOP实现原理,手写aop
    java 泛型
    JAVA反射getGenericSuperclass()用法
  • 原文地址:https://www.cnblogs.com/xxss/p/13234095.html
Copyright © 2011-2022 走看看