如何选择正确的列表实现?

cf与莫妮卡站在一起

从此CodeReview答案中

您似乎将ArrayList用于所有目的。Java中还有其他List-type比ArrayList更适合某些情况。您应该查看一下这些内容,并尝试了解何时使用哪个列表。在这种特定情况下,LinkedList更好。

我也倾向于ArrayList大量使用,并且看不到选择其他列表类型背后的逻辑。

List文档显示五个主要List子类:ArrayListCopyOnWriteArrayListLinkedListStack,和Vector

ArrayList文档中

size isEmpty,get,set,iterator和listIterator操作在恒定时间内运行。加法运算以固定的固定时间运行,即,添加n个元素需要O(n)时间。所有其他操作均以线性时间运行(大致而言)。与LinkedList实现相比,常数因子较低。

这表明它ArrayList通常会表现出色LinkedList此问题强烈质疑的问题支持),尽管LinkedList文档并不能很好地说明性能:

所有操作均按双向链表的预期执行。

CopyOnWriteArrayList 它仅对不变的列表有用,因为每次修改的完整快照对于正常使用而言似乎都非常昂贵。

即使是Stack文档,也不建议使用它:

Deque接口及其实现提供了一组更完整和一致的LIFO堆栈操作,应优先使用此类。

由于Vector是同步的,其余List子类却不同步,所以在我看来,这Vector将是线程安全环境中的最佳选择。

但是,即使在阅读了文档之后,我仍然认为我不明白TwoThe的答案来自何处。CopyOnWriteArrayList而且Vector每个似乎都有一个专门的用例,Stack似乎不值得使用,并且ArrayList似乎优于LinkedList

我在这里想念的是什么在什么情况下,另一种List实现方法会优于ArrayList

基因

我同意这ArrayList是许多用途的正确选择。LinkedList如前所述,每个元素使用8或16个字节的内存作为指针,索引为O(length)。

那有什么LinkedLists优势呢?

  • remove()迭代期间的删除是恒定时间。有了ArrayListO(长度)。
  • 添加新的列表节点始终需要相同的时间。ArrayLists空间不足时,将在后台分配更大的内存块,并复制所有内容。虽然每个元素在许多操作上的摊销时间对于每个元素都是恒定的,但个人的成本add()为O(length)。如果这种定期延迟是不可接受的,则不能使用ArrayList

至于其他的,Vector可以追溯到Java的最早时代。这是线程安全的。由于这会增加每个操作的成本,因此不赞成使用或多或少使用它ArrayList当需要线程安全时,可以在SynchronizedList周围使用包装器ArrayList类似地Stack,或多或少不赞成使用更现代的线程安全Deque

CopyOnWriteArrayList是一个线程安全数据列表,它通过某种不寻常的措施来确保其安全性,该措施在任何元素发生更改时都会复制整个数组。尽管这听起来很疯狂,但是如果有很多线程在同一个数组上进行迭代是有意义的,因为更改不必等待所有迭代完成,而其他并发列表通常就是这种情况。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何实现列表中的选择排序?

来自分类Dev

如何根据参数值选择正确的列表?

来自分类Dev

如何根据参数值选择正确的列表?

来自分类Dev

如何正确选择列表中的默认选项?

来自分类Dev

如何正确实现此Hibernate NamedQuery获取对象列表?

来自分类Dev

如何正确实现三巨头:单链接列表(C ++)

来自分类Dev

如何实现多项选择?

来自分类Dev

如何实现动态选择?

来自分类Dev

如何实现选择按钮

来自分类Dev

如何实现选择排序?

来自分类Dev

如何实现列表的“ takeUntil”?

来自分类Dev

如何实现多个选择列表并存储在jquery中的另一个选择列表上?

来自分类Dev

如何正确选择提交

来自分类Dev

正确实现列表迭代器方法

来自分类Dev

正确实现列表迭代器方法

来自分类Dev

如何使用Picasso库正确实现带有图像的自定义列表视图?

来自分类Dev

如何正确实现此类?

来自分类Dev

Angular2:如何基于外部值实现特定路由配置列表的选择性

来自分类Dev

如何通过简单的选择下拉列表-Jquery / CSS实现自举样式效果

来自分类Dev

如何选择列表列

来自分类Dev

Flutter:在列表视图构建器中如何使刚选择的值正确

来自分类Dev

如何将列标题正确添加到 WTForms 动态选择字段列表中

来自分类Dev

我的“选择列表”与当前的 Group By 子句不正确。我该如何解决?

来自分类Dev

如何实现对列表视图的OnScrollListener?

来自分类Dev

如何实现排序列表

来自分类Dev

如何使Grails选择正确的JDK?

来自分类Dev

如何正确选择多个属性?

来自分类Dev

如何选择正确的键盘图?

来自分类Dev

如何使jquery选择正确的ROW?

Related 相关文章

热门标签

归档