【问题标题】:Performance - volume of data - ArrayList<String>, List<Object> vs LinkedList<String>, LinkedList<Object> [duplicate]性能 - 数据量 - ArrayList<String>、List<Object> 与 LinkedList<String>、LinkedList<Object> [重复]
【发布时间】:2016-01-20 20:21:38
【问题描述】:

在我部署在 tomcat 上的 java 应用程序中,大约有 50 万个项目(甚至可以向上) 添加到 ArrayList。 然后,迭代这些列表以检查某些条件。

Que- 对于这种情况,使用 LinkedList 会提高性能吗?

对于超过 200K 项~ 100 万项的数据量的任何实践经验。

主要是具有多个属性的字符串和对象的列表,主要是字符串 (基本上是从 DB 中获取数据,将其转换为 Java 对象并通过 HTTP 发送过来) 如果数据大小预计保持在 100K 或更少,是否会有差异

【问题讨论】:

  • 您的问题不清楚:您问的是 List(接口)和 LinkedList(实现)之间的区别。
  • 简而言之:ArrayList 上的常数因子非常好,以至于LinkedList 几乎永远不是正确答案。
  • 谢谢路易斯。在发布我的问题之前,我确实彻底查看了其他问题。我不确定是否有人就我感兴趣的数据量以及因此的问题分享了有关实际生产数据的经验。我猜你不喜欢它并决定投反对票!如果这完全没用,我可以关闭这个问题。
  • @Filip - 更新了提到 ArrayList 的问题

标签: java performance arraylist linked-list


【解决方案1】:

看到这个问题: When to use LinkedList over ArrayList?

LinkedList 允许使用常量时间插入或删除 迭代器,但只有元素的顺序访问。换句话说,你 可以向前或向后遍历列表,但在列表中找到一个位置 list 所花费的时间与列表的大小成正比。

另一方面,ArrayList 允许快速随机读取访问,因此您 可以在恒定时间内抓取任何元素。但是添加或删除 除了结尾之外的任何地方都需要将所有后面的元素都转移过来, 要么开个口子,要么填补空白。此外,如果您添加更多 元素比基础数组的容量,一个新的数组(1.5 倍大小)被分配,旧数组被复制到新数组 一,所以在最坏的情况下添加到 ArrayList 是 O(n) 但恒定 平均。

【讨论】:

  • 感谢您的回答。在估算添加/检索我提到的数据量所需的时间方面,我一直在寻找一些实践经验。我确实在我的代码中估计了arraylist,但在更新代码、重新测试所有内容之前,我想问这个。对于与此主题相关的其他问题的答案,有人提到如果不删除/修改列表,linkedlist 可以更快。这让我印象深刻!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 2014-07-31
相关资源
最近更新 更多