繁体   English   中英

treemap vs arraylist - 迭代/添加/编辑值时的性能和资源

[英]treemap vs arraylist - perfomance & resources while iterating/adding/editing values

谈论性能和资源。

在添加和编辑值,ArrayList或TreeMap时,哪一个更快,所需资源更少?

或者是否有任何类型的数据可以击败这两个? (它必须能够以某种方式使数据排序)

ArrayLists和TreeMaps是用于不同事物的不同类型的结构。 了解您计划使用这些结构的内容会很有帮助。

数组列表

  • 允许重复(它是一个列表)
  • 摊销O(1)以添加到列表的末尾
  • O(n)插入列表中的任何其他位置
  • O(1)访问
  • O(n)删除

TreeMap的

  • 不允许重复键(它是一个Map)
  • O(logn)要插入
  • O(登录)访问
  • O(logn)删除

对ArrayList进行排序将花费O(nlogn)时间(在插入所有内容之后),而TreeMap将始终排序。

编辑

您已经提到过您正在处理从数据库中检索到的记录。 由于它们来自数据库,我认为它们已经被排序 - 在这种情况下,您应该将它们逐个插入到ArrayList中。

取决于你需要什么。

如果我们讨论的是排序数据 ,因为ArrayList是一个列表/数组,如果它已经排序,你可以得到O(log n)速度的值。 但是要插入,它是O(n) ,因为在插入新元素时可能需要移动整个数组。

TreeMap数据结构实现为红黑树 ,插入时间和搜索时间均为O(log n)

所以,简而言之:

Data Structure         Insertion Speed    Search Speed
ArrayList (sorted)     O(n)               O(log n)
TreeMap                O(log n)           O(log n)

我肯定会选择TreeMap 它还有额外的好处,就是让它现在就准备好了(你必须自己实现一些代码才能使ArrayList工作)。

注意:
如果没有得到O(n) (称为big-Oh)表示法,可以将其视为结构具有n元素时所需的秒数的公式。 因此,如果你有一个包含1000个元素( n=1000 )的ArrayList ,则需要3秒( log 1000 = 3 )才能在那里找到一个项目。 虽然插入新元素需要1000秒。

另一方面, TreeMap需要3秒才能搜索插入。

ArrayList只需要O(1)来添加和编辑值,因为您只使用索引访问它。 但是,在ArrayList中搜索元素是O(n),因为您必须最多通过列表的所有元素。

但您必须了解要实现的数据结构。 很难选择ArrayList和TreeMap,因为它们实际上并不是出于同样的目的(Map不允许重复但不允许使用ArrayList等)。

这是两张纸,描述了两者之间的差异(以及其他类型的集合)。

ListMap

在此输入图像描述

添加了Set

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM