此文已由作者赵计刚授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
7.1、List(允许重复元素)
-
ArrayList:
-
底层数据结构:Object[]
-
在查询(get)、遍历(iterator)、修改(set)使用的比较多的情况下,用ArrayList
-
可扩容,容量无限
-
LinkedList
-
底层数据结构:环形双向链表
-
在增加(add)、删除(remove)使用比较多的情况下,用LinkedList
-
链表,容量无限
说明:
1)add(E e):在数组末尾插入元素,ArrayList需要考虑扩容问题,一旦扩容就要进行数组复制,LinkedList不需要;
2)add(int index):在数组中间插入元素,ArrayList需要考虑将该index及其后的数组元素全部复制后移一位,LinkedList不需要
7.2、Set(不允许重复元素,所以可用于去重操作)
-
HashSet:
-
底层数据结构:HashMap
-
可看做容量无限
-
TreeSet:
-
底层数据结构:TreeMap
-
容量无限
7.3、Map(key-value)
-
HashMap:
-
底层数据结构:链表数组
-
可扩容,且最大容量极大,可看做容量无限
-
TreeMap:
-
底层数据结构:红黑树
-
可以实现按key排序(在使用中,要么使用TreeMap(Comparator),要么让key对象实现Comparable)
-
红黑树,容量无限
注意:
-
以上全部线程不安全
-
对于查找和删除较为频繁,且元素数量较多(元素数量>100)的情况下,Set和Map性能要比List好一些(单线程情况下)
上边第二个结论是在《分布式Java基础:应用与实践》一书中,林昊通过一系列的测试结果得出的。
免费领取验证码、内容安全、短信发送、直播点播体验包及云服务器等套餐
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 【译文】东京的外国工程师
【推荐】 理解DDoS防护本质:基于资源较量和规则过滤的智能化系统
【推荐】 企业项目开发--本地缓存guava cache(1)
网友评论