ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Map的基本用法

2020-07-06 10:02:32  阅读:240  来源: 互联网

标签:基本 Map hashMap key1 treeMap 用法 put null CCC


 

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

 

标签:基本,Map,hashMap,key1,treeMap,用法,put,null,CCC
来源: https://www.cnblogs.com/xxss/p/13234095.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有