请教个 Java LinkedList 用法的问题

查看 123|回复 8
作者:xloger   
之前看到个帖子里面的观点基本都是 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......

linkedlist, arraylist, 插入, 协程

geelaw   
只有反复修改的情况下才需要考虑数组/链表等数据结构。
>我需要将用户手机的全部图片、视频按时间倒序添加到一个 List 里。基于 Android 的 API 限制,图片和视频的查询是分开的,故有大量的中间插入需求。
这个很简单,你可以先把所有的图片和视频都弄到一个巨大的 ArrayList 里,然后再排序。我没做过 Android 开发,猜测 API 提供按时间顺序分别获取图片、视频的功能,那么你可以先准备好两个 ArrayList ,分别得到正确顺序的图片、视频,然后做一轮归并即可。
Ericcccccccc   
就说一点吧, 这玩意的作者都说他从来没用过 LinkedList, 也没见别人用过.
kingbill   
LinkedList 有顺序,别的场景没用过
hairoy   
2&3. 我的想法是,单线程 TreeMap ,多线程 ConcurrentSkipListMap ,时间戳可以放在 key 或 value 里,使用自定义排序器
Leviathann   
需要插入到排序的某个位置? treemap 咯
不然怎么利用顺序信息?
giiiiiithub   
因为很少有场景只是 append 、遍历,而没有随机插入、访问
giiiiiithub   
@giiiiiithub 修正:因为很少有场景只是增删改 、遍历,而没有随机访问
xiaofan305   
@giiiiiithub 现在做着的项目就有这种。我是用 LinkedList
您需要登录后才可以回帖 登录 | 立即注册

返回顶部