HashMap 和 Array 有什么区别?

  • 查找效率
    HashMap因为其根据hashcode的值直接算出index,所以其查找效率是随着数组长度增大而增加。
    ArrayMap使用的是二分法,当数组长度每增加一倍时,多进行一次判断,效率下降。

  • 扩容数量
    HashMap初始值16个长度,每次扩容的时候,直接申请双倍的数组空间。
    ArrayMap每次扩容的时候,如果size长度大于8时申请size*1.5个长度,大于4小于8时申请8个,小于4时申请4个。这样比较ArrayMap其实是申请了更少的内存空间,但是扩容的频率会更高。因此,如果数据量比较大的时候,还是使用HashMap更合适,因为其扩容的次数要比ArrayMap少很多。

  • 扩容效率
    HashMap每次扩容的时候重新计算每个数组成员的位置,然后放到新的位置。
    ArrayMap则是直接使用System.arraycopy,所以效率上肯定是ArrayMap更占优势。

  • 内存消耗
    以ArrayMap采用了一种独特的方式,能够重复的利用因为数据扩容而遗留下来的数组空间,方便下一个ArrayMap的使用。而HashMap没有这种设计。 由于ArrayMap之缓存了长度是4和8的时候,所以如果频繁的使用到Map,而且数据量都比较小的时候,ArrayMap无疑是相当的是节省内存的。

      总结综上所述,数据量比较小,并且需要频繁的使用Map存储数据的时候,推荐使用ArrayMap。 而数据量比较大的时候,则推荐使用HashMap。
    

HashMap 和 Array 有什么区别?相关推荐

  1. java中Array和ArrayList区别 可以将 ArrayList想象成一种会自动扩增容量的Array

    java中Array和ArrayList区别 1)精辟阐述: 可以将 ArrayList想象成一种"会自动扩增容量的Array https://blog.csdn.net/ywjy10280 ...

  2. Array和ArrayList区别

    Array和ArrayList区别 Array 在C#中的数组也是对象,实际上是Array类的实例. 主要区别 Array类型的变量在声明的同时,必须进行实例化,至少是初始化数组的大小,而 Array ...

  3. HashMap, LinkedHashMap 和 TreeMap的区别

    HashMap, LinkedHashMap 和 TreeMap的区别 Java里面的HashMap, LinkedHashMap 和 TreeMap 有什么区别?我看不出以下3个key和value有 ...

  4. Java中的HashMap和Hashtable有什么区别?

    Java中的aHashMap和a有什么区别Hashtable? Java中的aHashMap和a有什么区别Hashtable? Java中的aHashMap和a有什么区别Hashtable? Java ...

  5. HashMap和Hashtable的详细区别

    HashMap和Hashtable的详细区别 一.简述: 1.安全性 Hashtable是线程安全,HashMap是非线程安全.HashMap的性能会高于Hashtable,我们平时使用时若无特殊需求 ...

  6. java中Array和ArrayList区别

    2019独角兽企业重金招聘Python工程师标准>>> 1)精辟阐述: 可以将 ArrayList想象成一种"会自动扩增容量的Array". 2)Array([] ...

  7. PHP中array_merge和array相加的区别分析

    首先来看看键名是string,两者区别: <?php $arr1 = array('a'=>'PHP'); $arr2 = array('a'=>'JAVA'); //如果键名为字符 ...

  8. HashMap HashTable和ConcurrentHashMap的区别

    HashMap和Hashtable的区别 HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别.主要的区别有:线程安全性,同步(synchronizatio ...

  9. HashMap与HashTable联系与区别

    HashMap与HashTable 1.hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法. 2.hashTabl ...

最新文章

  1. android 字符串,textview
  2. java命令运行class文件提示错误:找不到或无法加载主类
  3. PyTorch教程(三):索引与切片
  4. 浅谈Java中的数据类型以及面向对象
  5. 首次曝光 | 阿里数万名开发者都在使用的数据库开发工具到底长什么样?
  6. 微信“拍一拍”,竟然可以使用Python实现,你get到了吗?
  7. 课题申报书范文_教师课题申报书范例
  8. WPS Office 11.1.0.10314 免费完整版
  9. Centos7下安装yasm详细步骤
  10. 网速/带宽与下载速度对照表
  11. mac虚拟摄像头插件_VCam虚拟摄像头(电脑虚拟摄像头视频软件)V5.4.2 官方最新版...
  12. 实践 ArcGIS Web 3D
  13. 《经济学通识》十二、谈环保
  14. Stderr: VBoxManage.exe: error: VT-x is not available (VERR_VMX_NO_VMX) VBoxM
  15. android代码控制组件的移动,Android自定义控件实现随手指移动的小球
  16. 操作系统进程完成时间,周转时间,带权周转时间, 平均周转时间, 带权平均周转时间计算
  17. 安装Ubuntu 21.04后要做的事
  18. eas报错日记_EAS8.1预留记录查询报错
  19. 霍尔效应传感器的5个重要应用
  20. 很多人都想做到却只能看别人做到的:自律

热门文章

  1. 服务器意外断电的数据恢复过程
  2. 下载文件时,文件名的设置
  3. 用开源中国(oschina)Git管理代码(整合IntelliJ 13.1.5)
  4. Day1、为什么JDK1.8中HashMap从头插入改成尾插入
  5. mysql ocp_MySQL 5.7OCP考试经验分享。
  6. 服务器中调试微信支付免预充,微信支付-统一支付接口被坑经历
  7. 安卓Android开发:使用AudioRecord录音、将录音保存为wav文件、使用AudioTrack保存录音
  8. vue3使用Pinia进行全局状态管理,Pinia安装和使用,Pinia 和 Vuex的对比
  9. halcon编程入门四——halcon缺陷检测
  10. Super-FAN论文阅读笔记