`
laintoday
  • 浏览: 64277 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

关于hashmap的性能实现

    博客分类:
  • Java
 
阅读更多

  1.在哈希术语中,内部数组中的每个位置称作“存储桶”(bucket),而可用的存储桶数(即内部数组的大小)称作容量 (capacity)。 为使 Map 对象有效地处理任意数目的项,Map 实现可以调整自身的大小。 但调整大小的开销很大。 调整大小需要将所有元素重新插入到新数组中,这是因为不同的数组大小意味着对象现在映射到不同的索引值。 先前冲突的键可能不再冲突,而先前不冲突的其他键现在可能冲突。 这显然表明,如果将 Map 调整得足够大,则可以减少甚至不再需要重新调整大小,这很有可能显著提高速度。


         2.关于HashMap的几个构造函数
            HashMap( ):                                //构造一个默认的散列映射
            HashMap(Map m):                            //用m的元素初始化散列映射
           HashMap(int capacity)                       //将散列映射的容量初始化为capacity
           HashMap(int capacity, float fillRatio):     //用它的参数同时初始化散列映射的容量和填充比
           注意:散列映射并不保证它的元素的顺序。因此,元素加入散列映射的顺序并不一定是它们被迭代函数读出的顺序。
  
        3.HashMap的性能因子
          容量(capacity): 散列表中bucket的数量。
          初始化容量(initial capacity): 创建散列表时bucket的数量。可以在构造方法中指定HashMap和HashSet 的初始化容量。
          尺寸(size): 散列表中记录的数量。(数组的元素个数,非list中元素总和)
          负载因子(load factor):                                                                                                                   

           (1)尺寸/容量。负载因子为0,表示空的散列表,0.5表示半满的散列表。轻负载的散列表具有冲突少,适宜插入与查询的特点,但是使用迭代器遍历会比较 慢。较高的负载会减少所需空间大小。当负载达到指定值时,容器会自动成倍地增加容量,并将原有的对象重新分配,存入新的bucket中,这个过程称为“重 列”。    

        (2)填充比(负载因子)必须介于0.0和1.0之间,它决定了在散列表向上调整大小之前散列表的充满度。具体地说,当元素的个数大于散列表的容量乘以它的填充比时,散列表被扩展。如果没有指定填充比,默认使用0.75,默认的容量是16。

分享到:
评论

相关推荐

    HashMap底层实现原理HashMap与HashTable区别HashMap与HashSet区别.docx

    HashMap和HashTable都基于哈希表实现,但是它们在使用和性能上存在一些差异。具体来说,HashMap是非同步的,而HashTable是同步的。因此,在多线程环境下,HashTable比HashMap更安全,但是性能可能较差。此外,...

    关于hashMap的一些讨论

    HashMap的实现原理的一些讨论,包括数据结构实现,存储数据的实现以及性能参数和Fail-Fas机制。

    java中HashMap详解

    HashMap是Java中非常常用的一种数据结构,它实现了Map接口,用于存储键值对。HashMap内部使用哈希表来实现,通过将键映射到哈希表中的一个位置来快速查找和插入元素。 HashMap的主要特点是: 非线程安全:如果多个...

    Java魔法解密:揭秘HashMap底层机制.pptx.pptx

    HashMap在性能优化方面采取多种策略,如扩容机制、负载因子调整等,以保持较低的冲突率和较高的查找效率,提升整体性能。 HashMap的线程安全机制。 HashMap通过synchronized关键字实现线程安全,确保多线程环境下的...

    Java HashMap三种循环遍历方式及其性能对比实例分析

    主要介绍了Java HashMap三种循环遍历方式及其性能对比,结合具体实例形式分析了Java HashMap三种循环遍历方式的实现方法、运行效率及性能优劣,需要的朋友可以参考下

    HashMap 源码分析

    然后知道jdk1.8出来以后,HashMap做性能优化修改,底层数据结构变成了数组+链表+红黑树,性能上也有了很大改变(但还是并发问题,可能这也是为了追求性能而不改的,因为在JUC包下已经有了可以支持并发的HashMap-...

    java程序员面试题

    HashMap和Hashtable的区别。 HashMap是Hashtable的轻量级实现(非...Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。 同步和异步有何异同,在什么情况下分别使用他们?举例说明。

    Java HashMap的三种遍历方法及优缺点含示例

    HashMap是一种基于哈希表的Map接口实现,主要用于存储键值对。它允许空值和空键。其主要特点是通过键的哈希值存储值,并提供了添加、获取和操作存储值的方法。 HashMap的底层数据结构是由数组和链表组成的。数组是...

    125条常见的java面试笔试题大汇总

    HashMap是Hashtable的轻量级实现(非线程安全的实现) ,他们都完成了Map接口 主要区别在于HashMap允许空(null) 键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap允许将null作为一个entry的key...

    largecollections-retired:使用堆外内存扩展到数百万个元素的 HashMap 实现

    这个库没有被取代,它提供了显着改进的性能。 Java Collections 实现,使用堆外内存扩展到数百万个元素,而不会遇到 GC 错误。 它利用 Google 的 LevelDB 项目来实现这一点。 目前这个 API 支持三种类型的 ...

    Java中的HashMap浅析

    在Java的集合框架中,HashSet,HashMap是用的比较多的一...  《Thinking In Java》里面有一个自己采用二维数组实现的保存key-value的demo,书上也说到性能问题,因为从数据结构的顺序结构的观点来看,常规的线性存储,

    jdk1.7和jdk1.8中hashmap区别

    HashMap基于哈希散列表实现 ,可以实现对数据的读写。将键值对传递给put方法时,它调用键对象的hashCode()方法来计算hashCode,然后找到相应的bucket位置(即数组)来储存值对象。当获取对象时,通过键对象的equals...

    java中HashMap的原理分析

    HashMap在Java开发中有着非常重要的角色地位,每一个Java程序员都应该了解HashMap。详细地阐述HashMap中的几个概念,并深入探讨HashMap的内部结构和实现细节,讨论HashMap的性能问题

    JavaSE基础面试题.docx

    1.面向对象的的特征有...21.负载因子为什么会影响HashMap性能 22.为什么HashMap中initailCapacity要设置成2的n次幂 23.ConcurrentHashMap分段式加锁是如何实现 24.HashMap存储null值的底层实现 25.叙述线程的生命周期

    java面试笔试题大汇总.doc

    HashMap和Hashtable的区别。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap...Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

    集合常见面试题

    ConcurrentHashMap是如何在保证并发安全的同时提高性能? ConcurrentHashMap是如何让多线程同时参与扩容? LinkedBlockingQueue、DelayQueue是如何实现的? CopyOnWriteArrayList是如何保证线程安全的?

    Java实现和维护系统详解.pdf

    但如果循环是为了找到特定元素,那目前还没有什么优化的办法,使得遍历数组和采用HashMap 的版本一样快。以数据库的性能为例,但运行环境的任何部分都可能会引起性能问题。 对于整体系统,采取结构化方法针对系统的...

    spatial-hashmap:javascript中的空间哈希图实现

    空间哈希图javascript中的空间哈希图实现中的问题和错误,请。 非常欢迎拉取请求! 注意:这些文档已过时。 我添加了很多方法并更改了很多,但我没有时间更新文档。 很抱歉:(。但是,我可能会在接下来的几天内更新...

    JAVA高并发高性能高可用高扩展架构视频教程

    JAVA企业级基础课题(HashMap那些事) 企业架构师必备技能(JAVA核心技术反射) JavaWeb之基础(手写实现Tomcat服务器) java多线程编程 纯手写实现SpringIOC实现过程 JEE企业级开发(企业级项目开发权威指南) 网络爬虫之...

    java面试难点讲解:hashmap,spring aop,classload,dubbo,zookeeper,session等。

    面试必考之HashMap源码分析与实现 探索JVM底层奥秘ClassLoader源码分析与案例讲解 面试必备技能之Dubbo企业实战 分布式框架Zookeeper之服务注册与订阅 互联网系统垂直架构之Session解决方案 分库分表之后分布式下...

Global site tag (gtag.js) - Google Analytics