我需要在索引 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/