Java treemap vs arraylist-性能与性能;迭代/添加/编辑值时的资源
谈论绩效和资源 在添加和编辑值时,ArrayList或TreeMap哪个更快,需要更少的资源 或者有任何类型的数据可以击败这两个?(它必须能够以某种方式对数据进行排序)ArrayList只需要O(1)即可添加和编辑值,因为您只能使用索引访问它。但是,在ArrayList中搜索一个元素是O(n),因为您最多只能搜索列表中的所有元素 但是您必须知道将实现什么样的数据结构。很难在ArrayList和TreeMap之间进行选择,因为它们的用途并不完全相同(映射不允许重复,但不允许ArrayList,等等) 这里有两张表格描述了两者(以及其他类型的集合)之间的差异Java treemap vs arraylist-性能与性能;迭代/添加/编辑值时的资源,java,performance,arraylist,resources,treemap,Java,Performance,Arraylist,Resources,Treemap,谈论绩效和资源 在添加和编辑值时,ArrayList或TreeMap哪个更快,需要更少的资源 或者有任何类型的数据可以击败这两个?(它必须能够以某种方式对数据进行排序)ArrayList只需要O(1)即可添加和编辑值,因为您只能使用索引访问它。但是,在ArrayList中搜索一个元素是O(n),因为您最多只能搜索列表中的所有元素 但是您必须知道将实现什么样的数据结构。很难在ArrayList和TreeMap之间进行选择,因为它们的用途并不完全相同(映射不允许重复,但不允许ArrayList,等等
列表
和地图
:还添加了
Set
:
取决于您需要什么 如果我们谈论的是已排序的数据,因为
ArrayList
是一个列表/数组,如果它已排序,您可以在O(logn)
速度中获得一个值。但是,插入是O(n)
,因为插入新元素时可能需要移动整个数组
TreeMap
数据结构实现为一个红黑树,插入时间和搜索时间均为O(logn)
因此,简而言之:
Data Structure Insertion Speed Search Speed
ArrayList (sorted) O(n) O(log n)
TreeMap O(log n) O(log n)
我肯定会选择树形图。它还有一个额外的好处,就是现在就可以准备就绪(您必须自己实现一些代码才能使ArrayList
工作)
注意:
如果没有得到O(n)
(称为big-Oh)表示法,请将其视为结构包含n
元素时所需秒数的公式。因此,如果您有一个包含1000个元素(n=1000
)的ArrayList
),则需要3
秒(log1000=3
)才能在那里找到项。不过,插入新元素需要1000秒
另一方面,TreeMap
将花费3秒来搜索和插入。数组列表和TreeMap是用于不同事物的不同类型的结构。了解您计划将这些结构用于什么目的将很有帮助
ArrayList
- 允许重复(它是一个列表)
- 摊销O(1)添加到列表末尾
- O(n)插入列表中的任何其他位置
- O(1)进入
- O(n)删除
TreeMap
- 不允许重复的关键点(它是一个地图)
- O(logn)插入
- O(logn)访问
- O(logn)将其拆下
排序ArrayList将花费O(nlogn)时间(插入所有内容后),而树映射将始终进行排序
编辑
您已经提到,您正在处理从数据库检索的记录。由于它们来自数据库,我假设它们已经被排序了——在这种情况下,您应该将它们逐个插入ArrayList。您遇到的性能或资源使用问题到底是什么?如果你“只是想知道”,不要过早地进行优化:谢谢你的输入,现在我正在处理从数据库检索到的大约50000条记录。除非每件物品都非常大,否则你的电脑仍然能够以闪电般的速度处理这些数量。记住,这是我们在这里讨论的内存操作。我的观点是:不要假设你会遇到问题。做个测试。创建一个包含500000个条目的ArrayList,并对其进行处理。如果你遇到麻烦,考虑其他选择。过早考虑性能和资源使用只会毁掉你的程序。在这里,这是多年痛苦的经历。