コレクションAPIの概要 | 目次 |
最も重要なコレクションクラスを上の図に示します。 これらの全てのクラスには共通点が多くあります。 例えば全てのコレクションは、コレクションクラス名の後に要素を書くという同じ普遍的な構文で作成できます:
Traversable(1, 2, 3)
Iterable("x", "y", "z")
Map("x" -> 24, "y" -> 25, "z" -> 26)
Set(Color.red, Color.green, Color.blue)
SortedSet("hello", "world")
Buffer(x, y, z)
IndexedSeq(1.0, 2.0)
LinearSeq(a, b, c)
同じ原則はコレクションの特定の実装にも当て嵌ります。例えば:
List(1, 2, 3)
HashMap("x" -> 24, "y" -> 25, "z" -> 26)
これらの全てのコレクションはtoStringで、上に書いたのと同じように表示されます。
全てのコレクションはTraversableで提供されるAPIをサポートしますが、意味がある場合は型を特殊化します。例えばTraversableクラスのmapメソッドは新しいTraversableを結果として返します。 しかしこの結果型はサブクラスで上書きされます。 例えばListのmapを呼ぶとListが返ってきますし、Setのを呼ぶとまたSetが返ってくるなどといった風です。
scala> List(1, 2, 3) map (_ + 1)
res0: List[Int] = List(2, 3, 4)
scala> Set(1, 2, 3) map (_ * 2)
res0: Set[Int] = Set(2, 4, 6)
コレクションライブラリの全てで実装されているこの挙動は均一的返り値の原則(uniform return type principle)と呼ばれています。
コレクション階層内のほとんどのクラスはルート・可変・不変3つの変種が存在します。唯一の例外はBufferトレイトで、可変コレクション内にのみ存在します。
以降ではそれらのクラスを1つづつ見ていきます。
続いては: Traversableトレイト
コレクションAPIの概要 | 目次 |