「高速学習スカラ座」の章XIII - コレクション

A.章のチェックリスト

  • すべてのコレクションを反復処理可能トレイトから延長されています。
  • 三つのカテゴリー、すなわち配列、およびマッピングセットのセットがあります。
  • ほとんどすべてのコレクションのために、Scalaは変数と不変バージョンの両方を提供します。
  • Scalaのリストは空や尾自体がリストであるものを持っているのいずれかです。
  • モンキー決まった順序が設定されていません。
  • LinkedHashSetの挿入配列を保持するために使用、または逐次たSortedSetを繰り返すことにより、
  • そして:+前方または後方配列に加え; ++ 2つのセットを張っ; - と - の要素を除去するステップと、+、+順不同のセットに要素を追加します
  • 反復可能な配列とは、一般的な操作のための10の方法がいくつかトレイト。あなたが長く書くと面倒なサイクルの前に、これらの方法は、あなたのニーズを満たすかどうかを見てみましょう。
  • ファスナーとオペレーティング技術が機能または動作するのに有用である折り畳みマッピングは、コレクションの要素に適用されます    

II。コレクションの主な特徴

  Scalaのコレクションの継承階層の重要な資質:

 

   反復処理可能は:コレクション内のこれらのコレクションは、イテレータ、以下のすべての要素を生成するために使用することができますされています。

// このコレクションのトラバースする最も基本的な方法である 
ヴァルコルを= ... // いくつかの反復処理可能 
ヴァルITER = coll.iterator
 しばらく(iter.hasNext)
    ....

  SEQ:シーケンス値は、このような配列、リストなど、優先順位付けする必要があります。IndexedSeq指数は、私たちは整数で任意の要素にアクセスすることができます。

  セット:注文の値を設定するが、たSortedSetに、シーケンシャルアクセスシーケンスにわたっていくつかの行の要素がありません。

  マップ:グループ(キー、値)の二重性を。SortedMapのは、エンティティがそれらにアクセスソートキーです。

  Javaの継承階層と同様に、いくつかの改善があります。

    同じ継承階層ではなく、別の階層に属しマッピング。

    IndexedSeqは区別するために、スーパータイプのリスト配列のスーパータイプではなく、

  注:作成した統一の原則:Scalaの各クラスは、特性やオブジェクト適用に関連したメソッドのセットがあります。

三つの変数セットと不変

  Scalaはまた、不変、不変なコレクションの優先順位の変数が設定されています。オブジェクトscala.collectionコンパニオンパッケージは、不変のセットを生成し、Scalaのパッケージとポイント不変のリスト、設定、地図のtypedef Predef品質をオブジェクト、およびPredef.Map scala.collection.immutable.Mapなど。  

IV。シーケンス

  

 

 シーケンス不変

  、添字のシーケンス高速なランダムアクセスをサポートしています。ベクトルはArrayBufferの不変バージョンです。達成するために、ツリー構造の形のベクトル。各ノードは、32個のバイトポイントまで持つことができます。百万要素にのみアクセスする4つのノード(= 10 ^ 6〜32 ^ 4)、500,000ジャンプするリストの必要性を必要とします。

  範囲は、整数のシーケンスを表し、構成するまで使用します。

  

 

 

可変配列 

  スタック、キュー、優先キュー。いくつかの特別な一覧を表示します

V.一覧

  Scalaで、リストのいずれかの空のテーブル(NIL)が、尾部に結合されたヘッド素子、2つの尾部はリストです。

  如ヴァル桁=リスト(4,2)、digits.tail是リスト(2)、dights.tail..head = 2、dights.tail.tail =ナシ、为4 digits.head。

  ::新しいリストの与えられた頭部と尾から作成するためのオペレータ、および右結合である::、など9として::リスト(4,2)のリスト(9,4,2)を得ました

  リスト内の移動:あなたは、再帰を使用して、パターンマッチングをイテレータを使用することができます。

  

// 再帰
デフSUM(LST:リスト[INT]):のInt =
もし(LST = NIL)0  lst.head + SUM(lst.tail)
 // 模式匹配 
DEF SUM(LST:リスト[INT])のInt = LST一致{
 ケース無記号=> 0
 の場合、H :: T => H + 合計(T)
}

 

VI。変数リスト

  リストLinkedListの不変変数と同様の、ELEM次の割り当て参照に、その頭を変更尾を変更する基準を割り当てることによって達成することができます。    

七.集

  要素の集合セットは、繰り返さない(デフォルトのハッシュテーブルが実装されている)乱れています。[彼らの新しい配置を設定することが許可され、ブロック]

  順番に、ハッシュチェーンの要素を覚えることができ、この目的(LinkedHashSetの)のためのリストを維持します。

  係る要素(たSortedSet)は集中アクセス、赤黒木の実装に命じました。

  非負の整数格納されたワードのビットシーケンスに関して、達成するために設定されたビットのセットです。

  セットが指定された値を含むかどうかをチェックする方法が含まれ、subsetOfセット内のすべての要素がセットは、他が含まれているかどうかチェックします。〜&、&| - 組合(++)、交差()は、diffはまた書くことができ、一般的な操作です。 

要素を追加または削除するVIII。演算子

 

 

  

IX。一般的な方法

  反復可能な重要な方法:

 

 

  配列の質の重要な点:

   

 

 

 

   注:これらのメソッドは、元のコレクションを変更しませんが、コレクションは「統一された戻り値の型」の原則と呼ばれる同じタイプの元のセット、と返されます。

コレクションにX.マッピング機能を

  このようなマップ、フィルタとのように。

  flatMap出力の設定ではなく、値。

  部分関数を集める - 機能は、すべての可能な入力値のために定義されていません。

XI。簡素化、フォールディングおよびスキャン

  二元函数组合集合中的元素。如List(1,7,2,9).reduceLeft(_ - _)得((1-7)-2)-9=-17,同样Left(1,7,2,9).reduceRight(_ - _)得1-(7-(2-9))=-13,List(1,7,2,9).foldLeft(0)(_ - _)得0-1-7-2-9=-19(可以用:/来写foldLeft)。

  折叠有时候可以替换循环,如计算字母出现频率,一种是遍历这个字符串然后更新映射,另一种是将频率映射和新遇到的字母结合产生一个新的频率映射,这就是折叠,例:

(Map[Char,Int]()/:"TESthahaLYq"){
(m,c)=>m+(x->(m.getOrElse(c,0)+1))
}

 

十二.拉链操作

  将两个集合相互对应的元素结合在一起。如果两个集合长度不一致,zip则按短的来;zipAll会让你指出较短列表的缺省值zipWithIndex返回对偶的列表。

十三.迭代器

  可以用iterator方法从集合中获得一个迭代器(hasext(),next()等方法,遍历一次该迭代器九不能使用了),减少代价,但是迭代器很脆弱,每次对next的调用都会改变迭代器的指向。

十四.流

  流提供的是一个不可变的替代品(尾部被来计算的不可变的列表),这是懒执行的,只有当用到时才会执行。

  使用#::来构建一个流,例def numsFrom(n:BigInt):Stream[BigInt]=n #::numsFrom(n+1)。

十五.懒视图

  可以对其他集合应用view方法得到同样懒执行的效果。

十六.与Java集合的互操作

十七.线程安全的集合

十八.并行集合

十九.练习

おすすめ

転載: www.cnblogs.com/lyq-biu/p/11971795.html