1. 概要

このチュートリアルでは、標準ライブラリで利用可能な多くのコレクションの1つであるScalaArrayBufferクラスについて詳しく説明します。

2. Scalaコレクション

Scalaは、 List Set Map など、あまり一般的に使用されていないさまざまなコレクションを提供します。 Scala ArrayBufferはその1つです。

Scalaには、不変コレクションと可変コレクションの2つの主要なコレクショングループがあります。 Scalaコミュニティは不変のデータ構造の使用に偏っていますが、標準のlibは多くの可変コレクションも提供します。そのような例の1つは、に非常によく似たArrayBufferクラスです。通常のJavaリスト。

3. ArrayBuffer

ArrayBufferは、可変リストの特定の実装です。 これは、作成後もリストに要素を追加し続けることができることを意味します。 リストの現在の最大サイズを超えると、別のより大きなメモリ内配列が割り当てられ、そこにすべての要素がコピーされます。 不変リストの場合、別の要素を追加しようとすると、常に新しいリストが作成されます。

もう1つの重要な詳細は、具体的には ArrayBuffer の実装がインデックス付き配列によってバックアップされることです。つまり、コレクションの任意の要素に常にアクセスできます。

3.1. 新しいArrayBufferの作成

新しいインスタンスの作成は非常に簡単です。

scala> import scala.collection.mutable.ArrayBuffer

scala> val nums = ArrayBuffer(1, 2, 3)
val nums: ArrayBuffer[Int] = ArrayBuffer(1, 2, 3)

そして、新しいインスタンスがあります。

3.2. 新しい要素の追加

要素を追加するには、いくつかの異なる解決策があります。

scala> import scala.collection.mutable.ArrayBuffer

scala> val l = ArrayBuffer(1, 2, 3)
val l: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3)

scala> l += 4
val res0: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4)

scala> l.append(5)
val res1: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4, 5)

scala> l.prepend(0)
val res2: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0, 1, 2, 3, 4, 5)

scala> l.insert(0, -1)

scala> l
val res3: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(-1, 0, 1, 2, 3, 4, 5)

ArrayBufferを使用すると、リストの最初と最後の両方に新しい要素を挿入できます。 さらに、インデックス付きのリストであるため、リストの任意の位置に要素を簡単に挿入することもできます。

3.3. 要素の削除

要素を削除するには、いくつかの異なる方法も利用できます。

scala> import scala.collection.mutable.ArrayBuffer

scala> val l = ArrayBuffer(1, 2, 3, 4, 5, 6, 7)
val l: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4, 5, 6, 7)

scala> l -= 3
val res1: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 4, 5, 6, 7)

scala> l.remove(3,2) // starting from index 3, remove 2 elements

scala> l
val res2: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 4, 7)

挿入と同様に、リストの任意の位置から要素を削除することもできます。

3.4. 別のリストを追加する

別のListまたはその他のコレクションを連結する必要がある場合は、 ArrayBuffer#appendAllメソッドを使用できます。

scala> val l = ArrayBuffer(1, 2, 3)
val l: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3)

scala> l.appendAll(List(4,5,6))
val res3: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4, 5, 6)

4. 結論

この記事では、ArrayBufferクラスといくつかのより一般的な操作について説明しました。