gpt4 book ai didi

arrays - ArrayBuffer 和 Array 有什么区别

转载 作者:行者123 更新时间:2023-12-03 13:18:48 27 4
gpt4 key购买 nike

我是 Scala/java 的新手,我很难区分这两者之间的区别。

通过阅读Scala doc我明白 ArrayBuffer被做成交互式的(追加、插入、前置等)。

1) 基本的实现差异是什么?

2)这两者之间是否存在性能差异?

最佳答案

两者 ArrayArrayBuffer是可变的,这意味着您可以修改特定索引处的元素:a(i) = eArrayBuffer可调整大小,Array不是。如果您将元素附加到 ArrayBuffer ,变大。如果您尝试将元素附加到 Array ,你得到一个新数组。因此使用 Array s 有效,你必须事先知道它的大小。
Array s 在 JVM 级别实现并且是唯一未删除的泛型类型。这意味着它们是存储对象序列的最有效方式——没有额外的内存开销,并且一些操作是作为单个 JVM 操作码实现的。
ArrayBufferArray 实现在内部,并在需要时分配一个新的。追加通常很快,除非它达到限制并调整数组的大小——但它以这样一种方式进行,整体影响可以忽略不计,所以不用担心。前置是通过将所有元素向右移动并将新元素设置为第 0 个元素来实现的,因此它很慢。在循环中添加 n 个元素是有效的 (O(n)),而添加它们则不是 (O(n²))。
Array s 专门用于内置值类型(除了 Unit ),所以 Array[Int]将比 ArrayBuffer[Int] 优化得多– 值不必装箱,因此使用更少的内存和更少的间接性。请注意,与往常一样,特化仅在类型是单态的情况下才有效 – Array[T]将始终装箱。

关于arrays - ArrayBuffer 和 Array 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31213733/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com