【问题标题】:treemap vs arraylist - perfomance & resources while iterating/adding/editing valuestreemap vs arraylist - 迭代/添加/编辑值时的性能和资源
【发布时间】:2013-05-19 11:47:35
【问题描述】:

谈论性能和资源。

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

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

【问题讨论】:

  • 您遇到的性能或资源使用问题究竟是什么?如果您“只是想知道”,请不要过早优化:en.wikipedia.org/wiki/Premature_optimization#When_to_optimize
  • 感谢您的意见,现在我正在处理从数据库中检索到的大约 50 000 条记录。但他们可能会上升到 500 000。
  • 除非每个项目都非常大,否则您的计算机仍然能够以闪电般的速度处理这些数量。请记住,这是我们在这里讨论的内存中操作。
  • 我的意思是:不要以为你会遇到问题。做一个测试。创建一个包含 500 000 个条目的 ArrayList,并对其进行处理。如果遇到麻烦,请考虑替代方案。过早考虑性能和资源使用只会毁掉你的程序。这是多年的痛苦经历,在这里。

标签: java performance arraylist resources treemap


【解决方案1】:

ArrayLists 和 TreeMaps 是用于不同事物的不同类型的结构。了解您打算将这些结构用于什么目的会很有帮助。

数组列表

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

树图

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

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

编辑

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

【讨论】:

    【解决方案2】:

    取决于你需要什么。

    如果我们谈论的是排序的数据,因为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 个元素的 ArrayList (n=1000),则需要 3 秒 (log 1000 = 3) 才能在那里找到一个项目。但是插入一个新元素需要 1000 秒。

    另一方面,TreeMap 将花费 3 秒来搜索插入。

    【讨论】:

      【解决方案3】:

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

      但是您必须知道您将实现哪些数据结构。很难在 ArrayList 和 TreeMap 之间进行选择,因为它们的目的并不相同(Map 不允许重复,但 ArrayList 不允许,等等)。

      这里有两张表,描述了两者之间的区别(以及其他类型的集合)。

      ListMap :

      也添加了Set

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多