我是scala/java的新手,我在解决这两个问题上遇到了麻烦.
通过阅读scala文档,我了解到ArrayBuffer是交互式的(追加,插入,前置等).
1)基本的实施差异是什么?
2)这两者之间是否存在性能差异?
谢谢.
Kar*_*l S 36
这两个Array和ArrayBuffer是可变的,这意味着你可以修改在特定的索引内容:a(i) = e
ArrayBuffer可调整大小,Array不是.如果将元素追加到a ArrayBuffer,它会变大.如果您尝试将元素追加到a Array,则会得到一个新数组.因此,要Array有效地使用s,您必须事先知道它的大小.
Arrays在JVM级别上实现,是唯一的非擦除泛型类型.这意味着它们是存储对象序列的最有效方式 - 不会产生额外的内存开销,而某些操作则作为单个JVM操作码实现.
ArrayBuffer通过Array内部实现,并在需要时分配新的实现.附加通常是快速的,除非它达到限制并调整阵列的大小 - 但它以这样的方式完成,整体效果可以忽略不计,所以不要担心.前置实现为将所有元素向右移动并将新元素设置为第0个元素,因此它很慢.附加Ñ在一个循环中的元素是有效的(ø(Ñ)),在前面加上它们不是(ø(ñ ²)).
Arrays专门用于内置值类型(除外Unit),因此Array[Int]将比ArrayBuffer[Int]- 不需要加框值更加优化,因此使用更少的内存和更少的间接.请注意,专门化一如既往仅在类型为单形的情况下有效 - Array[T]将始终装箱.