对比Hashtable,HashMap,TreeMap,谈谈对HashMap的理解

xxdmn519 2019-07-06 原文

对比Hashtable,HashMap,TreeMap,谈谈对HashMap的理解

都实现了Map接口,存储的内容是基于key-value的键值对映射,一个映射不能有重复的键,一个键最多只能映射一个值。

1.初始化的时候:HashTable在不指定容量的情况下的默认容量是11,且不要求底层数组的容量一定要为2的整数次幂;HashMap默认的容量为16,且要求容量一定为2的整数次幂。

2.HashTable,HashMap具有无须特性。TreeMap是利用红黑树实现的,实现了SortMap接口,能够根据保存的键的记录进行排序。所以需要使用排序则选择TreeMap,默认为升序排序,可通过实现Comparator自定义排序方式

3.HashTable的key,value都不能为null;HashMap中的key,value可以为null,但是只有一个key为null的键值对,但是允许有多个值为null的键值对;TreeMap中当没有实现Comparator接口时,key不可以为null;当实现Comparator接口时,若未对null情况进行判断,则key不可以为null.

4.HashTable其方法函数都是同步的,因此保证了线程的安全性。因为同步的关系,在多线程环境下,当一个线程访问HashTable的同步方法时,其他线程访问同步方法就会进入阻塞状态,大大的降低了程序的运行的效率,因此被废弃,不推荐使用。

HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,会导致数据的不一致。如果需要同步可以使用Collections的synchronizedMap方法.或者ConcurrentHashMap类,其基于lock实现锁分段技术,它不但确保多线程环境下数据访问安全性,而且性能上有长足的提升。

HashMap的总结:

HashMap基于哈希思想,实现对数据的读写。当键值对被传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,然后找到bucket位置来存储对象。当获取对象的时候,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap通过链表来解决碰撞问题,当碰撞发生时,对象将会储存在链表的下个节点中.HashMap在每个链表节点中储存键值对对象。当两个不同的键对象的hashcode相同时,它们会储存在同一个bucket位置的链表中,这时候就需要通过equals()方法来找到键值对。

posted on 2019-07-06 12:45 小小的码农519 阅读() 评论() 编辑 收藏

 

 
版权声明:本文为xxdmn519原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/xxdmn519/p/11142390.html

对比Hashtable,HashMap,TreeMap,谈谈对HashMap的理解的更多相关文章

  1. JAVA集合

    集合集合概念:对象的容器,定义了对多个对象进行操作的常用方法,可实现数组的功能和数组的区别数组长度固定,集合长度不固定数组可以存储基本类型和引用类型,集合只能存储引用类型 (装箱和拆箱操作)位置:java.util.*;Collectio...

  2. 逆向工具/反编译工具 集合

    目录 Java & Jar (Android) C++ & So (Android) C# & […]...

  3. 模拟斗地主真人在线发牌

    模拟斗地主真人在线发牌 前言 要斗地主先得有牌吧,没牌斗个鸡毛,所以先让厂家生产一副扑克牌。然后呢,哥们三个今 […]...

  4. Java开发工程师最新面试题库系列——集合部分(附答案)

    集合 如果你有更好的想法请在评论区留下您的答案,一起交流讨论 说说常见的集合有哪些? 答:主要分List、Se […]...

  5. Python学习,第六课 – 集合

    Python中集合的相关操作  集合是一个无序的,不重复的数据组合 它的主要作用如下: 去重,把一个列表变成集 […]...

  6. Java集合

    集合集合类的特点:提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变。1. Collection(接口):单列集合List(接口):元素可重复ArrayList(实现类):LinkedList(实现类):Set(接口):元素不...

  7. Java集合(简单介绍)

    集合目录集合1.集合的作用2.集合类的分类CollectionCollection方法分类首先看一下添加操作与批量添加操作集合删除数据ArrayListLinkedListArrayList与LinkedList的区别HashMapLi...

  8. LinkedList

    LinkedList是一个以双向链表实现的List,它除了作为List使用,还可以作为队列或者堆栈使用。 Li […]...

随机推荐

  1. Dynamics 365中的Client API form context (formContext)

    适用于Dynamics 365 for Customer Engagement apps 9.x版本。   本 […]...

  2. 女朋友突然问我DNS是个啥….

    女朋友突然问我DNS是个啥…. 今天晚上我正在床上躺着刷手机,然后我女朋友突然说她的电脑坏了。说连 […]...

  3. Linux Y1.5 (Ubuntu 9.10) 官方发行版

    2009年10月 28日,Ubuntu 发布了9.10版本,我们第一时间制作了此定制版,方便广大 Linux […]...

  4. Linux查看文件命令

    linux查看日志文件内容命令有 cat 由第一行开始显示文件内容 tac 从最后一行开始显示,可以看出 ta […]...

  5. MacBook Pro的电池电量无法充到 1% 以上的解决方法

    MacBook Pro的电池电量无法充到 1% 以上的解决方法 有极少数客户在使用 MacBook Pro(2 […]...

  6. VS Code WebApi系列——3、发布

    上两篇已经实现了WebApi及基于jwt的Token设置,那么功能做完了,该发布WebApi了。为什么要对发布 […]...

  7. 利用jquery load 局部刷新数据

    利用jquery load 局部刷新数据 BODY { padding: 0; margin: 0 } 本文属 […]...

  8. HearthBuddy中_settings.txt的更详细参数解释

    https://tieba.baidu.com/p/5275382967 默认的配置不是很合理,花了点时间读了 […]...

展开目录

目录导航