Scalaのデータ構造
その他
2019-09-29 02:29:37
訪問数: null
配列
Array
固定長、ArrayBuffer
可変長
arr.toBuffer
、 buf.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
実現foreach
iterator
Seq
順序付けられた配列であってlength
、固定されたインデックス
IndexedSeq
高速なランダムアクセスVector
を実現
LinearSeq
効率的なhead
/ tail
を通じて操作、ListBuffer
実現
Set
要素を繰り返すことなく、順序なしのセット、
- デフォルトの実装は
HashSet
、実際には、対応するハッシュ値に従ってソートされる要素であります
HashSet
見つけるよりもはるかに速く要素Array
またはList
検索
Map
キーと値のペアのコレクションは、scala.Predef
暗黙的な変換を提供し、直接使用することができkey -> value
表します(key, value)
不変
可変
ArrayBuffer
- 含まれている
array
とsize
(から継承ResizableArray
)
- ほとんどの動作速度と
Array
同じ
- 要素は尾に追加されてもよい(時定数を評価し、より大きな有効添加元素のために設定されてもよいです)
ListBuffer
同様のArrayBuffer
が、リンクリストの実装に基づいて、
LinkedList
- 要素は、次の要素を指すリンクが含まれています
- 自身が自分自身を指して、空のリスト要素
LinkedHashSet
またハッシュ特性の、要素の記録順序が挿入されます
mutable.Queue
+=
単一の要素を追加する、++=
複数の要素を追加します
dequeue
チームの最初のエレメントを削除して返します
mutable.Stack
そして、元のデータが変更されたことを除いて同じの不変のバージョン、意志
mutable.BitSet
直接更新し、元のデータを変更する比率immutable.BitSet
より効率
転載: www.cnblogs.com/yuanzam/p/11605561.html