本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点
Java常见数据结构特点
ArrayList
- ArrayList底层是基于数组实现
- add、删除元素需要进行元素位移耗性能,但查找和修改块
- 适合不需要频繁添加删除的
链表
- LinkedList 是双链表插入和删除节点快,查找和修改耗时
HashMap
- 1.7之前是数组+链表;1.8之后是数组+链表+红黑树
- 计算key的位置时用的位运算:h & (length-1),位运算更快
- HashMap对应的key、value是一一对应的唯一的
扩容
- 默认HashMap大小是16,必须是2的倍数
- 加载因子:默认是0.75
- 阈值:0.75 * 16 = 12的时候扩容
- 扩容是为了避免冲突,提升性能,扩容的时候会重新计算哈希,比较耗性能
- 要尽量避免扩容,初始化的时候要设置HashMap的大小,会自动计算到最接近的2的次幂
- HashMap真正初始化的时候是在put的时候,节约内存
- 为什么是2的次幂,是为了计算index:h & (length-1),后面是1111,计算index更不容易碰撞
- HashMap是用空间换时间
HashMap的一个经典的优化就是初始化时,尽可能的设置要初始化的容量,尽量避免扩容的发生
SparseArray
- 原理是2个数组,key一个数组,value一个数组,key和value一一对应
- key是int,value是object
- key数组是按照大小顺序排,查找的时候是2分查找,提升性能
- remove的时候,不会真的移除,而是会做个标记,这样不用arraycopy,下次再put就是一个赋值操作,提升性能
- 会越用越快,缺点是key只能是int
ArrayMap
- 原理是HashMap+SparseArray,也是2个数组,key数组和value数组,不过key不限于int
- key的计算和HashMap一样,不过有哈希冲突时,没有用链表而是追加到后面
Kotlin中的优化
Kotlin提供了一些优化和特性来简化和高效地操作常见的数据结构,如 List 和 Map。以下是一些针对这些数据结构的优化和特性示例:
List
- Immutable Lists: 使用
listOf()创建不可变列表。 - Mutable Lists: 使用
mutableListOf()创建可变列表。 - 操作符重载: 你可以使用标准库中的高阶函数、扩展函数和操作符重载来高效地操作列表。
// 创建不可变列表
val numbers: List<Int> = listOf(1, 2, 3, 4

最低0.47元/天 解锁文章
1126

被折叠的 条评论
为什么被折叠?



