java - 在java中的给定索引处有效地在ArrayList中添加元素

标签 java performance arraylist

我需要在索引 i 处的 ArrayList 中插入一个 Person 类型的元素(我自己定义的类)

我知道我可以使用 add(int index, E element) .

但是是否有任何有效的方法可以做到这一点,因为在我的列表中它平均需要大约 1.5 毫秒(收集超过 1000 次插入的数据,然后取平均值)。

最佳答案

如果你的任务是插入/删除密集型的,你总是可以使用 java.util.LinkedList .

  • ArrayList 的大小有限。每次添加一个元素时,Java 都会确保它适合 - 因此它会增长 ArrayList。如果 ArrayList 增长得更快,就会发生大量的数组复制。
  • LinkedList 只是将元素添加到正确的位置(链接周围的节点),而不增长和复制整个 ArrayList。
  • LinkedList 的缺点是当您搜索一个元素时。由于它没有索引,它必须从列表的开头遍历到结尾才能找到一个项目。

对于LinkedList:

  • 获取是 O(n)
  • 加法是 O(1)
  • 删除是 O(n)
  • Iterator.remove 是 O(1)

对于 ArrayList:

  • 获取是 O(1)
  • add 是 O(1) 摊销的,但最坏的情况是 O(n),因为数组必须调整大小和复制
  • 删除是 O(n)

关于java - 在java中的给定索引处有效地在ArrayList中添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17146085/

相关文章:

java - 如何从 opensaml 2.6 迁移到 3.1.1

java - 不将对象的实例分配给变量是不好的做法吗?

java - 房间: Use class that extends ArrayList as Entity

java - 在Java数组列表中连接字符串

java - 嵌入 YouTube 视频不起作用

java - -bash : java: command not found in Centos5

java - 如何在不向前移动迭代器的情况下获取单元格值 - Excel、Java POI

javascript - 刷新时加载页面

Python 最佳实践 : series of "or"s or "in"?

java - 如何将两个映射合并为一个并保留重复值