Scalaのデータ構造

配列

  • Array固定長、ArrayBuffer可変長
    • arr.toBufferbuf.toArray
  • 初期化を使用しないでください。 new
  • 使用する()アクセス要素を
  • 使用するfor (elem <- arr)要素を横切る、逆arr.reverse
  • 使用して、for (elem <- arr if ...) ... yield ...新しい配列に変換しました
    • それは同等ですarr.filter(...).map(...)かより簡潔arr filter { ... } map {...}
  • GMとJava配列、それがあればArrayBuffer、としてscala.collection.JavaConversions使用
  • 任意の操作を行う前に変換されますArrayOpsオブジェクト
  • 多次元アレイの構築
    • val matrix = Array.ofDim[Double](3, 4) // 3 行 4 列

マップ&タプル

  • 作成し、クエリ、構文と地図を通過するのは簡単
    • val scores = Map("a" -> 100, "b" -> 90, "c" -> 95)デフォルトでは作成することであるimmutableハッシュマップを
    • 変数の地図を明示的に指定する必要があります scala.collection.mutable.Map
    • タイプを指定するには、空のマップの必要性を作成します。 new scala.collection.mutable.HashMap[String, Int]
    • 地図は、キーと値のペアのコレクションで、キーは同じタイプではないかもしれません
      • "a" -> 100等価("a", 100);別の文言を作成しますMap(("a", 100), ("b", 90), ("c", 95))
    • アクセス
      • scores("a") //戻りオプション
      • scores("d").getOrElse(0) //実際の値を返します。
    • 変更可能なアップデート
      • 更新された値 scores("a") = 80
      • 要素を追加します。 scores += ("d" -> 70, "e" -> 50)
      • 要素を削除します scores -= "a"
    • 非再生可能不変、生成する新しいマップが変更されますが、データ要素の公開部分が共有されています
      • 新しい要素を追加すると、地図が生成されます、scores + ("d" -> 70, "e" -> 50)
      • 新しいマップを生成するための要素を削除します scores - "a"
    • トラバーサル for((k,v) <- map) ...
    • ソートマップ
      • ソートキー記憶によればscala.collection.immutable.SortedMap("d" -> 1, "b" -> 2, "c" -> 3)//マップ( - > 2、B 、C - > 3、D - > 1)
      • 分配オーダーscala.collection.mutable.LinkedHashMap("d" -> 1, "b" -> 2, "c" -> 3)//マップ(D - > 1、 B - > 2、C - > 3)
  • 可変と不変の区別
  • デフォルトのハッシュマップは、ツリーマップを使用することができます
  • 地図やJavaで便利な変換 scala.collection.JavaConverters
    • 多くの場合、タスクを完了するためのJavaインターフェースの使用を必要とするが、結果は、等ファイル操作など、より便利に処理するためにScalaのデータインターフェースを扱う変換することができます。
  • タプルは便利な時に重合操作
    • キーと値のペアの地図はタプルの最も単純な形式であります (k, v)
    • 同じ型を持っていません val a = (1, 3.14, "hello")
    • 添字アクセスa._1// 1
    • パターンマッチングアクセス val (first, second, _) = a
    • 戻り値は、複数の
  • ビュン
    • タプルは、複数の値を処理同時に結合するために使用することができます
    • zip 方法

コレクション

ファイル

  • コレクションのパフォーマンスの比較
  • どのくらいのセットでscala.collection.JavaConverters交換するJavaのセットで
  • 設定して区別ジェネリック(scala.collection)、(可変scala.collection.mutable)と不変(scala.collection.immutable
    • あなたは明示的に不変のデフォルトを使用して、パッケージまたはパッケージのパスをロードしない場合
  • コレクションtraitまたはclass関連するオブジェクトが、あるapply方法は、直接のような、例えば、セットを構成することができますArray(1,2,3)
  • Traversable最上位レベルのコレクションは、唯一のforeach方法は、他の方法の使用を直接継承することができ、抽象します
  • Iterable唯一のiterator方法は、他の方法の使用を直接継承することができ、抽象的です
    • Traversable相違点は、iterator 状態に(次の要素を取得する前に、次の選択可能要素に取得時間、常にコレクションの位置を追跡します)
    • Iterable実現foreachiterator
  • Seq順序付けられた配列であってlength、固定されたインデックス
    • IndexedSeq高速なランダムアクセスVectorを実現
    • LinearSeq効率的なhead/ tailを通じて操作、ListBuffer実現
  • Set 要素を繰り返すことなく、順序なしのセット、
    • デフォルトの実装はHashSet、実際には、対応するハッシュ値に従ってソートされる要素であります
      • HashSet見つけるよりもはるかに速く要素ArrayまたはList検索
  • Mapキーと値のペアのコレクションは、scala.Predef暗黙的な変換を提供し、直接使用することができkey -> value表します(key, value)
    • SortedMap キーで並べ替え

不変

ファイル

  • Vector 添字コレクション、高速なランダムアクセスをサポートし、不変の同等 ArrayBuffer
    • 各ノードによって達成される二股樹高係数は32個の要素またはサブノードを含みます
    • 高速なランダム選択と高速なランダム更新の間のバランスを保ちます
    • 補うためListのランダムアクセスの欠陥
  • Range 一貫性のある整数、ステップの順序セット
    • 1 to 10 by 3 即ち、3のステップで1〜10のシーケンスを生成
    • utilボーダーが含まれていない、to境界が含まれています
    • のみ保存し、実際の値を保存しないでくださいstartendstep三つの値
  • List リミテッドシーケンス不変
    • 空であるNil、またはその二つの部分を含むhead要素およびtail(サブList
    • ::よると、与えられたheadtail新しいビルドList
      • 右右呼び出しから、すなわち、結合する1 :: 2 :: Nilと等価である1 :: (2 :: Nil)//結果`リスト(1,2)
    • headtail特性は、操作を容易に再帰的に行うことができます

      def multi(l: List[Int]): Int = l match {
        case Nil    => 1
        case h :: t => h * multi(t)
      }
    • 複雑
      • 買収headtailのみ一定の時間O(1)
      • ヘッド内の添加元素は、一定の時間を必要とするO(1)。使用することができるmutable.ListBuffer追加/頭部又は尾部に操作要素を削除してもよいです
      • その他の動作は線形時間を必要とします O(N)
  • SortedSet 赤黒木のため、デフォルトの実装要素にアクセスするために、セットを注文

  • immutable.BitSet下地用い非負整数のセット、Longアレイストレージを
    • 小さな整数の整数、例えば3,2,0バイナリ表現で表される1101、すなわち、13進
  • ListMap
    • キーと値のペアによってLinkedList表現しますMap
    • 標準より多くの場合Mapより遅く、それほど少ないを使用して
      • 場合にのみ、より頻繁な比較優位を得ることの最初の要素(すなわち、ListA head
  • Streamそして、List似ていますが、要素は遅延計算
    • 無制限の長さ
    • 唯一の要求要素が計算されます
      • できるforceのすべての要素を強制的に計算されます
    • #::建設、1 #:: 2 #:: 3 #:: Stream.empty結果がされStream(1, ?)、ここでのみ印刷head1、しかしtail、彼らは計算されていないため、印刷されていないがtail
  • immutable.Stack LIFO 序列
    • pushスタック、popスタック、top先頭の要素を参照してください
    • ほとんど使用されない場合、その操作ができるためListは、(push= ::pop= tailtop= head
  • immutable.Queue FIFOシーケンス
    • enqueue カラムには、複数の列にパラメータのセット、使い捨て要素を使用して行うことができ
    • dequeue カラムは、結果は2つの部分から成り (element, rest)

可変

  • ArrayBuffer
    • 含まれているarraysize(から継承ResizableArray
    • ほとんどの動作速度とArray同じ
    • 要素は尾に追加されてもよい(時定数を評価し、より大きな有効添加元素のために設定されてもよいです)
  • ListBuffer同様のArrayBufferが、リンクリストの実装に基づいて、

  • LinkedList
    • 要素は、次の要素を指すリンクが含まれています
    • 自身が自分自身を指して、空のリスト要素
  • LinkedHashSet またハッシュ特性の、要素の記録順序が挿入されます

  • mutable.Queue
    • +=単一の要素を追加する、++=複数の要素を追加します
    • dequeue チームの最初のエレメントを削除して返します
  • mutable.Stack そして、元のデータが変更されたことを除いて同じの不変のバージョン、意志

  • mutable.BitSet直接更新し、元のデータを変更する比率immutable.BitSetより効率

おすすめ

転載: www.cnblogs.com/yuanzam/p/11605561.html