HashMap、HashTable、ArrayList、定长数组之间的性能和速度比较

1、HashMap & HashTable 的速度谁快

HashMap 牺牲了线程安全提高了效率,HashTable 牺牲了效率换来了线程安全

2、HashMap 为什么线程不安全

HashMap 底层维护了一个数组,当多线程的时候对这个数组操作是不安全的。

3、ArrayList & HashMap 通过get() 取值谁速度更快

第一种原因:

  • ArrayList 底层由数组实现,list.get(index).当ArrayList 去按索引查找时。会先去数组里比对索引是否越界。然后再去找。耗时要比HashMap慢些.
  • HashMap 由键值对存储,取值通过 map.get(key),当程序运行到此时会直接get(key)没有就返回null 。由于HashMap是允许存储空值空key的,但空key只能存储一个,所以当hashmap集合的值需要去做比对时不能使用equals。

ArrayList get(index)时会先调用rangeCheck()方法对索引进行判断ArrayList get(index)时会先调用rangeCheck()方法对索引进行判断
第二种原因:
HashMap为什么比数组查询快
  通常数组不直接保存值,而是通过保存值的list。然后对list中的“值”使用equals方法比较,这部分查询速度自然慢。但是如果有好的散列函数,数组的每个位置就只有较少的“值”。因此,不是查询所有的list,而是快速跳到数组的某个位置,只对很少的额元素进行比较,这就是HashMap会如此之快的原因。

4、定长数组是性能王者(集合里面最快的数据结构)

数组在内存中是连续存放的,所以性能很好。通过索引访问和更新元素时,不存在除范围检查之外的其他开销。
但插入元素和删除元素总是要进行数组复制。

5、Java里多个Map的性能比较

![在这里插入图片描述](https://img-blog.csdnimg.cn/f173a9aa700b40659ee6f1c8201ed4ac.png

  • TreeMap基于红黑树(一种自平衡二叉查找树)实现的,时间复杂度平均能达到O(log n)。
  • HashMap是基于散列表实现的,时间复杂度平均能达到O(1)。
  • ConcurrentSkipListMap是基于跳表实现的,时间复杂度平均能达到O(log n)

(原文链接:https://blog.csdn.net/debugingstudy/article/details/12716327)

6、HashMap夺命14问

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值