一、 HashMap

1)底层实现 
数组+链表+红黑树(在JDK1.8中如果链表长度大于8的时候才转换为红黑树)

2)是否线程安全
不支持线程的同步,线程不安全,如需同步,可用Collections的synchronizedMap方法或者使用ConcurrentHashMap,调用这个对象的方法使HashMap具有同步的能力。

3)插入值操作过程

public synchronized V put(K key, V value) {// Make sure the value is not nullif (value == null) {throw new NullPointerException();}// Makes sure the key is not already in the hashtable.Entry<?,?> tab[] = table;int hash = key.hashCode();int index = (hash & 0x7FFFFFFF) % tab.length;@SuppressWarnings("unchecked")Entry<K,V> entry = (Entry<K,V>)tab[index];for(; entry != null ; entry = entry.next) {if ((entry.hash == hash) && entry.key.equals(key)) {V old = entry.value;entry.value = value;return old;}}addEntry(hash, key, value, index);return null;}

4) 特点
HashMap最多只允许一条记录的键为null,允许多条记录的值为null,然后和插入效率高,但是插入的数据是无序的,插入、删除和定位元素,HashMap是最好的选择

5)hashmap什么时候进行扩容
当hashmap中的元素个数超过数组大小loadFactor时,就会进行数组扩容,loadFactor的默认值为0.75,也就是说,默认情况下,数组大小为16,那么当hashmap中元素个数超过160.75=12的时候,就把数组的大小扩展为2*16=32,即扩大一倍,然后重新计算每个元素在数组中的位置,而这是一个非常消耗性能的操作。

二、 Hashtable

1)底层实现
它继承自Dictionary类

2)是否线程安全
支持线程的同步,线程安全,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢

三、LinkedHashMap

1)底层实现
双向链表+HashMap(LinkedHashMap是继承于HashMap)

2) 是否支持线程安全
不支持线程的同步,线程不安全

3)特点
保存了记录的插入顺序,也就是数据是有序的,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的, 也可以在构造时用带参数,按照应用次数排序,一般在遍历的时候会比HashMap慢,有HashMap的全部特性,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。

四、TreeMap

1)底层实现
红黑树

2)是否线程安全
不支持线程的同步,线程不安全

3)特点
TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

五、ConcurrentHashMap

1)底层实现
拓展了Hashtable,底层采用分段的数组+链表实现

2)是否线程安全
支持线程的同步,线程安全,即任一时刻只有一个线程能写ConcurrentHashMap。

3)特点
锁分离技术,段内扩容,ConcurrentHashMap对分开两次操作也是安全的。

Java之HashMap、Hashtable、LinkedHashMap、TreeMap、ConcurrentHashMap简单的区别相关推荐

  1. Java—Map集合详解(HashMap/Hashtable/LinkedHashMap/Properties/TreeMap/WeakHashMap/IdentityHashMap/EnumMap)

    关注微信公众号:CodingTechWork,一起学习进步. Map Map集合介绍   Map(也称为字典.关联数组)是用于保存具有映射关系的数据,保存两组值,key和value,这两组值可以是任何 ...

  2. Java中的Map集合及其子类HashMap,LinkedHashMap,TreeMap,ConcurrentHashMap

    一 .Map public interface Map<K,V> 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口哦取代了Dictionary类,后者完全是 ...

  3. Java中HashMap、LinkedHashMap和TreeMap区别使用场景

    1. HashMap中k的值没有顺序,常用来做统计. 2.LinkedHashMap吧.它内部有一个链表,保持Key插入的顺序.迭代的时候,也是按照插入顺序迭代,而且迭代比HashMap快. 3. T ...

  4. 【面试专栏】第五篇:Java基础:集合篇-LinkedHashMap、ConcurrentHashMap、TreeMap

  5. HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底层实现。

    HashSet与HashMap区别 HashMap实现了Map接口  HashSet实现了Set接口 HashMap储存键值对  HashSet仅仅存储对象 HashMap使用put()方法将元素放入 ...

  6. java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用于存储健值对,根 ...

  7. HashMap、HashTable、ConcurrentHashMap、HashSet区别 线程安全类

    HashMap专题:HashMap的实现原理--链表散列 HashTable专题:Hashtable数据存储结构-遍历规则,Hash类型的复杂度为啥都是O(1)-源码分析 Hash,Tree数据结构时 ...

  8. HashMap和LinkedHashMap的比较使用

    由于现在项目中用到了LinkedHashMap,并不是太熟悉就到网上搜了一下. import java.util.HashMap; import java.util.Iterator; import ...

  9. JAVA day20、21 双列集合Map<K,V>:HashMap,LinkedHashMap,TreeMap,Hashtable, ConcurrentHashMap;JDK1.9新特性

    一.Map<K,V> Java提供了专⻔的集合类⽤来存放这种这种⼀⼀对应的关系,叫做映射对象,即 java.util.Map 接⼝. 类型参数: K - 此映射所维护的键的类型 V - 映 ...

最新文章

  1. Android5.1.1源码 - zygote fork出的子进程如何权限降级
  2. php预测,趋势预测法-PHP实现
  3. python中的enumerate函数
  4. python中object是什么数据类型_自学Python2.1-基本数据类型-字符串str(object) 上
  5. 1323. 6 和 9 组成的最大数字
  6. Java输出数字到文本文件FileWriter
  7. 某LINUX平台,管道open直接崩溃
  8. 360携手HarmonyOS打造独特的“天气大师”
  9. 知识付费与内容付费的区别
  10. php计算圆的面积怎么带单位_圆的面积计算公式的教学演示工具的制作方法
  11. js中ajax提交表单提交表单提交,JS中ajax请求提交form表单
  12. 音乐格式转换软件测试工资,无损音乐如何转换 无损音乐格式转换 无损音乐转换器...
  13. WIN10家庭版增加本地安全策略
  14. 使用vue制作网页导航栏
  15. Mcad学习笔记之委托再理解(delegate的构造器,MulticastDelegate,BeginInvoke,EndInvoke,Invoke4个方法的探讨)...
  16. LinkCloud谈云主机与主机托管主机租用的区别
  17. Android 身高计算
  18. 苏菲的世界-part2
  19. Spring框架整合Java Web Token
  20. cms漏洞复现-越权漏洞

热门文章

  1. WPF MVVM实例三
  2. .NET6之MiniAPI(五):选项
  3. 如何摆脱「自我否定」状态
  4. 在VS Code中直接调试Web程序,是怎样一种体验?
  5. .NET Core3.1升级.NET5,坑还真不少...
  6. 设计模式中的那些工厂
  7. 基于.NetCore3.1搭建项目系列 —— 使用Swagger做Api文档(上篇)
  8. EFCore.Sharding(EFCore开源分表框架)
  9. .NET Core开发实战(第11课:文件配置提供程序)--学习笔记
  10. EF Core For MySql查询中使用DateTime.Now作为查询条件的一个小问题