|
しくみ |
長所 |
短所 |
リスト(List) |
要素ごとに、次の要素がどこにあるかというポインタを持つ。 |
不変。長さが可変。データに順序性がある。 |
先頭から順にアクセスすることとしかできない。メモリ使用量は多め。 |
配列(Array) |
連続したメモリ空間に順次格納する。 |
連続した領域に保存されるため、インデックス番号で高速にアクセス可能。 |
サイズ変更に大きな時間がかかる場合がある。 |
マップ(Map) |
内部に用意された配列に、ハッシュ関数を使用してアクセスする。 |
不変。キーを利用して固定時間でのアクセスが可能。インデックスが連続する自然数である必要がない。 |
データに順序性が(表向きには)ない。要素数が少ない場合にはListを線形探索した方が早い場合がある。 |
集合(Set) |
内部に用意された配列に、ハッシュ関数を使用してアクセスする。 |
不変。Mapに似ているが、特定のキーが集合に存在するかどうかだけを保持する。 |
左の目的に合致すれば、Mapよりもメモリ使用量は少ない。 |
シーケンス(Seq) |
要素の並びをどこかに持っているわけではなく、「次の値を生成する関数」を値が要求されるたびに呼び出しているだけ。 |
無限集合を扱える。値を保持しているわけではないのでメモリを食わない。 |
シーケンシャルに取り出してもあまり早くない。 |