ArrayList or Linked List - Which collection to use if both insertion/deletion and look up operation is to be performed
我们知道,Linked List用于快速插入删除
数组列表用于快速查找
我要求在List中保存10000条记录。 我会用哪个系列。
可以在该列表上执行查找和插入/删除操作。
我使用哪个系列,原因是什么?
要么
我会使用自己创建的收藏吗?
插入
先插入 - O(1)
最后插入 - O(1)
在任何地方插入 - O(n) - 这是因为需要通过索引找到要插入的位置。
先插入 - O(n)
最后插入 - O(1)
随处插入 - O(n)
所以
删除
首先删除 - O(1)
最后删除 - O(1)
删除任何地方 - O(n) - 再次,这是因为需要通过索引找到要删除的位置。
首先删除 - O(n)
最后删除 - O(1)
随处删除 - O(n)
所以
正如您所看到的,两者的插入和删除是相同的。
如果你总是插入最后一个操作,那么ArrayList适合使用,因为如果你知道索引,那么查找是O(1)和O(n)的LinkedList。我认为你需要找到更适合使用的黄金中间。
此外,如果你不关心无公开,你可以使用HashSet。它基于哈希表,并为插入和删除,查找提供合适的性能(O(1),O(许多情况下为log(n))。
HashSet jdoc
This class offers constant time performance for the basic operations (add, remove, contains and size), assuming the hash function disperses the elements >properly among the buckets.
每当您需要选择适合您的问题的数据结构时,请在以下链接中查看这些表格。
BIG-O Complextity
在不查看数据的情况下,除非您的用例涉及使用
您选择的重要因素:
最后 - 您是否考虑过使用
一些参考:
- Java ArrayList与LinkedList的性能,仅与创建/插入和排序有关
- 为什么处理排序数组比未排序数组慢? (c#但适用于Java)
- https://github.com/joaquintides/usingstdcpp2015/blob/master/Mind%20the%20cache.pdf(c ++但列表vs适用于Java的矢量讨论 - 以LinkedList vs array的方式排序)