ArrayBuffer
ArrayBuffer
используется тогда, когда нужна изменяемая индексированная последовательность общего назначения.
Поскольку ArrayBuffer
индексирован, произвольный доступ к элементам выполняется быстро.
Создание ArrayBuffer
Чтобы использовать ArrayBuffer
, в отличие от предыдущих рассмотренных классов, его нужно вначале импортировать:
import scala.collection.mutable.ArrayBuffer
Если необходимо начать с пустого ArrayBuffer
, просто укажите его тип:
var strings = ArrayBuffer[String]()
var ints = ArrayBuffer[Int]()
var people = ArrayBuffer[Person]()
Если известен примерный размер ArrayBuffer
, его можно задать:
val buf = new ArrayBuffer[Int](100_000)
Чтобы создать новый ArrayBuffer
с начальными элементами, достаточно просто указать начальные элементы,
как для List
или Vector
:
val nums = ArrayBuffer(1, 2, 3)
val people = ArrayBuffer(
Person("Bert"),
Person("Ernie"),
Person("Grover")
)
Добавление элементов в ArrayBuffer
Новые элементы добавляются в ArrayBuffer
с помощью методов +=
и ++=
.
Также можно использовать текстовый аналог: append
, appendAll
, insert
, insertAll
, prepend
и prependAll
.
Вот несколько примеров с +=
и ++=
:
val nums = ArrayBuffer(1, 2, 3)
// nums: ArrayBuffer[Int] = ArrayBuffer(1, 2, 3)
nums += 4
// res0: ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4)
nums ++= List(5, 6)
// res1: ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4, 5, 6)
Удаление элементов из ArrayBuffer
ArrayBuffer
является изменяемым, поэтому у него есть такие методы, как -=
, --=
, clear
, remove
и другие.
Примеры с -=
и --=
:
val a = ArrayBuffer.range('a', 'h')
// a: ArrayBuffer[Char] = ArrayBuffer('a', 'b', 'c', 'd', 'e', 'f', 'g')
a -= 'a'
// res2: ArrayBuffer[Char] = ArrayBuffer('b', 'c', 'd', 'e', 'f', 'g')
a --= Seq('b', 'c')
// res3: ArrayBuffer[Char] = ArrayBuffer('d', 'e', 'f', 'g')
a --= Set('d', 'e')
// res4: ArrayBuffer[Char] = ArrayBuffer('f', 'g')
Обновление элементов в ArrayBuffer
Элементы в ArrayBuffer
можно обновлять, либо переназначать:
val a = ArrayBuffer.range(1,5)
// a: ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4)
a(2) = 50
println(a)
// ArrayBuffer(1, 2, 50, 4)
a.update(0, 10)
println(a)
// ArrayBuffer(10, 2, 50, 4)
Ссылки: