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()方法对索引进行判断
第二种原因:
HashMap为什么比数组查询快
通常数组不直接保存值,而是通过保存值的list。然后对list中的“值”使用equals方法比较,这部分查询速度自然慢。但是如果有好的散列函数,数组的每个位置就只有较少的“值”。因此,不是查询所有的list,而是快速跳到数组的某个位置,只对很少的额元素进行比较,这就是HashMap会如此之快的原因。
4、定长数组是性能王者(集合里面最快的数据结构)
数组在内存中是连续存放的,所以性能很好。通过索引访问和更新元素时,不存在除范围检查之外的其他开销。
但插入元素和删除元素总是要进行数组复制。
5、Java里多个Map的性能比较
- TreeMap基于红黑树(一种自平衡二叉查找树)实现的,时间复杂度平均能达到O(log n)。
- HashMap是基于散列表实现的,时间复杂度平均能达到O(1)。
- ConcurrentSkipListMap是基于跳表实现的,时间复杂度平均能达到O(log n)
(原文链接:https://blog.csdn.net/debugingstudy/article/details/12716327)