我試圖忽略從ArrayBuffer
中刪除元素是如何工作的。下面是它:瞭解Scala中的ArrayBuffer
override def remove(n: Int, count: Int) {
if (count < 0) throw new IllegalArgumentException("removing negative number of elements: " + count.toString)
else if (count == 0) return // Did nothing
if (n < 0 || n > size0 - count) throw new IndexOutOfBoundsException("at " + n.toString + " deleting " + count.toString)
copy(n + count, n, size0 - (n + count))
reduceToSize(size0 - count)
}
的事情是如下副本實現:
protected def copy(m: Int, n: Int, len: Int) {
scala.compat.Platform.arraycopy(array, m, array, n, len)
}
這意味着它只是複製新陣列的同一個數組內容而不調整其大小。相比之下,ArrayList
在JDK
中調整了數組的大小,只要我們從中刪除元素即可。
我的理解錯在哪裏?
不太清楚。如果我們將null設置爲用新大小重新創建數組,它是否完全相同? –
@ St.Antario重新創建陣列要貴得多,因此只需將元素設置爲null,並使GC可以完成其工作就更合適。我們並不關心內部數組的實際大小,而是私有字段'size0'的值。 – aristotll