请教个 Java LinkedList 用法的问题

241 天前
 xloger
之前看到个帖子<https://www.zhihu.com/question/563680801/answer/2750393567>里面的观点基本都是 ArrayList 全方位优于 LinkedList 。
我总结了一下大概这几点:
1 、ArrayList 内存占用远优于 LinkedList 。
2 、LinkedList 因为设计原因,随机插入需要遍历,速度并不快。
3 、作者自己都不用。(盯着这点说我觉得挺没意思的,因为这不是求知的理由)

但是我想到了我最近的一个 LinkedList 的应用场景:我需要将用户手机的全部图片、视频按时间倒序添加到一个 List 里。基于 Android 的 API 限制,图片和视频的查询是分开的,故有大量的中间插入需求。
按照我的理解,ArrayList 这种场景下会有大量的数据后移操作,故我认为这时候用 LinkedList 要科学很多?

疑问:
1 、上述场景中,ArrayList 还是优于 LinkedList 么?如果是原因是什么?
2 、是否有更合适的数据结构? Java 似乎是没有根据比较器在插入时根据内容决定插入位置的 List 。
3 、在并发场景下,最合适的实现方案是什么?按我的理解是加个读写锁?用 CopyOnWriteArrayList 我感觉在这个场景下是一个性能很差的方案。
4 、第三个问题中,实际上我是用 Kotlin 的协程实现的,用 mutex 锁的,有没有更优的方案?(比如直接创建单线程的协程?)

国庆假期也不知道有没有人逛 V2......
1705 次点击
所在节点    Java
22 条回复
Ericcccccccc
194 天前
@ohwind 如果认真要讨论. 几万个数据没必要用 linkedlist.
txzh007
129 天前
写撤销和回退撤销的时候用过链表,不过这种场景比较少. 需要高频次对数组长度进行修改还是 linkedlist,当然现在可以预先申请很大容量的 arraylist.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/978929

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX