【问题标题】:Worthwhile to convert ArrayList to array for performance?是否值得将 ArrayList 转换为数组以提高性能?
【发布时间】:2013-11-14 13:48:13
【问题描述】:

我最近发现了 ArrayList 的“toArray() : Object[]”方法,我想知道是否应该利用它来提高性能。

我知道 ArrayList 比 Object[] 数组更昂贵,但它当然更方便,因为它会自动调整大小。但我想如果我使用 ArrayList 来构建我的对象列表,我可以在执行更密集的数据操作时将其转换为 Object[] 数组。

在 ArrayList 完成构建后将 ArrayList 转换为任何数组 Object[] 是否是一种好习惯?有时,如果我遍历 200K 对象 ArrayList 并将其与另一个 ArrayList 对象进行比较,则需要一段时间。我会在性能方面受益吗?

【问题讨论】:

    标签: arrays sorting arraylist


    【解决方案1】:

    首先,您永远不应该对性能做出假设。你需要测量它。我刚刚证明了我的“感觉”是错误的。我很确定ArrayListObject[] 的性能非常相似。设置了initialCapacityArrayList 只是一个简单的数组包装器。这些包装方法肯定是由 JVM 内联的。

    原来我错了。我写了一个simple test 来获得一些实数。在我的机器(Oracle Java 7 64bit,Linux)上,数字是:

    ArrayList write: 105.8ms
    String[]  write:  39.8ms
    
    ArrayList read:   64.1ms
    String[]  read:   40.9ms
    

    所以ArrayListset() 上慢了大约 100%,在 get() 上慢了 50%。

    那是在没有自动装箱的情况下。我也在 ArrayList<Integer>int[]run a test

    ArrayList<Integer> write: 2660.0ms
    int[]              write:   27.5ms
    
    ArrayList<Integer> read:    59.5ms
    int[]              read:    20.2ms
    

    GC 在String[] 测试期间没有运行,但在int[] 测试期间它运行了大约 25 次。

    尽管如此,将ArrayList 复制到Object[] 只是为了排序是没有意义的:

    14.98ms  Collections.sort(list)
    15.32ms  Arrays.sort(list.toArray(new String[list.size()]));
    

    【讨论】:

      【解决方案2】:

      要完成以前的回答,当性能很重要时,查看实际实现也是一个好习惯 ArrayList 并分析您最常使用的特定操作。您可以查看 get 和 set 操作的开销(这里的开销是由类型通用性、范围检查和 func 调用引起的)。这将帮助您确定是否会使工作变得更糟。 (总而言之,不要到处优化,只优化真正重要的几个点)

      【讨论】:

        【解决方案3】:

        这真的取决于情况。有时最好转换它,否则它不是。您必须权衡利弊 - 如果您必须对对象执行大量操作,那么 ArrayList 可能是最佳解决方案。肯定是因为您项目中的其他人可能依赖于 ArrayList。

        否则,如果您知道使用 Array[] 开发应用程序不会受到伤害(意味着没有其他人依赖它,并且您不介意做一些额外的工作来编写自己的排序等)而不是使用 Array [] 可能是最好的选择。

        Array[] = 程序性能更高 ArrayList -> 更容易编写/节省时间。

        这完全取决于你想做什么:)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-16
          • 2023-04-08
          • 2019-12-31
          • 1970-01-01
          • 1970-01-01
          • 2021-04-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多