等価性 トップ 文字列 性能特性 目次
最新版は Scala Documentation に移行しました。

性能特性

これまでの説明で異なるコレクションが異なる性能特性 (performance characteristics) を持つことが分かった。性能特性はコレクション型を比較する第一の基準としてよく使われる。以下の二つにコレクションの主な演算の性能特性をまとめた。

head tail apply 更新 先頭に追加 最後に追加 挿入
不変
    List 定数 定数 線形 線形 定数 線形 -
    Stream 定数 定数 線形 線形 定数 線形 -
    Vector 実質定数 実質定数 実質定数 実質定数 実質定数 実質定数 -
    Stack 定数 定数 線形 線形 定数 線形 -
    Queue ならし定数 ならし定数 線形 線形 線形 定数 -
    Range 定数 定数 定数 - - - -
    String 定数 線形 定数 線形 線形 線形 -
可変
    ArrayBuffer 定数 線形 定数 定数 線形 ならし定数 線形
    ListBuffer 定数 線形 線形 線形 定数 定数 線形
    StringBuilder 定数 線形 定数 定数 線形 ならし定数 線形
    MutableList 定数 線形 線形 線形 定数 定数 線形
    Queue 定数 線形 線形 線形 定数 定数 線形
    ArraySeq 定数 線形 定数 定数 - - -
    Stack 定数 線形 線形 線形 定数 線形 線形
    ArrayStack 定数 線形 定数 定数 ならし定数 線形 線形
    Array 定数 線形 定数 定数 - - -
列型の性能特性

 

検索 追加 削除 最小
不変
    HashSet/HashMap 実質定数 実質定数 実質定数 線形
    TreeSet/TreeMap Log Log Log Log
    BitSet 定数 線形 線形 実質定数3
    ListMap 線形 線形 線形 線形
可変
    HashSet/HashMap 実質定数 実質定数 実質定数 線形
    WeakHashMap 実質定数 実質定数 実質定数 線形
    BitSet 定数 ならし定数 定数 実質定数4
集合型とマップ型の性能特性

 

表の値を以下に説明する:

定数 演算は (高速な) 定数時間で完了する。
実質定数 演算は実質定数時間で完了するが、ベクトルの最大長やハッシュキーの分布など何らかの前提に依存する。
ならし定数 演算は「ならし定数時間」で完了する。演算の呼び出しの中には定数時間よりも長くかかるものもあるが、多くの演算の実行時間の平均を取った場合定数時間となる。
Log 演算はコレクションのサイズの対数に比例した時間で完了する。
線形 演算は線形時間、つまりコレクションのサイズに比例した時間で完了する。
- 演算はサポートされていない。

最初の表は、不変と可変両方の列型の以下の演算の性能特性をまとめる:

head 列の最初の要素を選択する。
tail 最初の要素以外の全ての要素から成る新たな列を生成する。
apply 添字によるアクセス。
更新 不変列のときは (updated による) 関数型の更新、可変列のときは (update による) 副作用としての上書き更新。
先頭に追加 列の先頭への要素の追加。不変列のときは新たな列を生成する。可変列のときは現在の列を上書きする。
最後に追加 列の最後に要素を追加する。不変列のときは新たな列を生成する。可変列のときは現在の列を上書きする。
挿入 要素を列の任意の位置に挿入する。この演算は可変列にのみサポートされている。

次の表は、不変と可変両方の集合とマップの以下の演算の性能特性をまとめる:

検索 要素が集合に含まれるかを調べるか、マップからキーに関連付けられた値を選択する。
追加 集合に新たな要素を追加するか、マップにキー/値ペアを追加する。
削除 集合から要素を削除するか、マップからキーを削除する。
最小 集合の最小要素かマップの最小キー。

続いては、等価性


等価性 トップ 文字列 性能特性 目次