1.为什么arraylist查找要快?
因为地址是连续的,一计算就得到了目标值
2.HashMap的由来?
结合了ArrayList和LinkedList的优点
3.Hash Map put的实现原理:
1.通过key获得hash值,
2.hash值与length取模得到数据要存放在数组位置的索引值
3.通过数组元素挂载链表的方式解决key值hash冲突
4.加载因子是0.75,默认长度16,阈值:0.75*16=12
5.设置阈值来扩容是为了length值更大,key取模时减少hash冲突,不至于链表越来越长而单链表结构出现,提高性能
6.扩容同时会造成length变大,因为get时也是用的hash key,所以会找不到,这时候必须对所有再次hash和重新存储,这里是耗性能点
7.如何避免扩容:初始化时评估下数据容量(c/0.75+1),如何保证初始化时时2的次幂:初始化时会比较,为什么是2的次幂?:都是1的情况下,碰撞减少了
8.hash table 初始化是在put的时候,而不是在传入capacity的初始化时候?因为内存,用的时候才创建
9.基于以上我们得知,hashmap以空间换取了时间,所以浪费了空间,于是Android特地出了一个SparseArray,采用双数组和二分查找思想且删除操作并非真实删除
10.SparseArray又只能key村int值,所以又衍生出ArrayMap
性能优化-数据结构优化-HashMap
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...