質問

このようスタイルや好みがこれを:されることがあります。scala.配列?使うリストのすべての時間や時には実行に配列番号、地図のように、私は利用したことのないものが配列する。はそれだけであるJavaの互換性はありますか?私は失っており共同利用-。

役に立ちましたか?

解決

まずを作ってみましょう免責事項こちらです。Scala2.7の Array ときには、Java Array やスカーラコレクションも同時に行います。でほぼ成功も失敗も一部のコーナー。残念ながら、これらのコーナーのケースバイケースで起こり、通常のコードでScala2.8が出発する。

にScala2.8が Array, は、Java Array.そしたらストーリー作品やろうかが連続したメモリ空間は、店舗のいずれかの参照またはプリミティブ(および、そのため、異なる要素サイズでランダムにアクセスか早いです。でも下の方法では、恐ろしい toString 実装を行う悪の使用時にジェネリック医薬品およびプリミティブの時間(例: def f[T](a: Array[T]) = ...; f(Array(1,2,3))).

と、それが GenericArray, は、Scalaの収集に裏付けられた Array.でも店舗の弁当のプリミティブでないパフォーマンスに問題が混合プリミティブのジェネリック医薬品ですが、他方ではないの利益の純粋なプリミティブ(一般)プリミティブ配列の型になります。

なので、使用の際はどう?An Array は,以下のような特徴を持つ。

  • O(1)ランダム読み書き
  • O(n)append/誤動作防止)/挿入-削除
  • 変更可能な

必要がない場合はジェネリック医薬品、ジェネリック医薬品可能となるプロジェクトについて、 [T <: AnyRef], えることで、プリミティブである AnyVal, し、その特性を最適コードします。

場合はうまく管理できなければならないジェネリック医薬品を含む、プリミティブは、これらの特徴などに最適コードを使用 GenericArray にScala2.8.もしたい場合は、真の収集は、そのすべての方法で使用する場合がありますどのくによって暗黙的に変換式

したい場合は不変またはあなたが必要求性能-追加-誤動作防止)、挿入、削除する場合は、該当するものです。

他のヒント

あなたが同じ(または互換)の項目数を持っている場合、配列は、クラスが適切である、とあなたは、事前にそれらの項目の正確な数、または合理的な上限を知っている、そしてあなたは、高速ランダムアクセスに興味を持っていますアイテムのおそらくその場で変更が、それを設定した後、あなたは、リスト内のどこかから項目を挿入しないか、削除決してます。

それとも別の方法で述べたように、それはやや少ないオーバーヘッドで、コレクション型未満の添えものと集計データ構造だとわずかに良いパフォーマンスは、それが使われている方法に応じています。

A非常に不自然な例:あなたは、機能を生産する事業にしている、およびこれらの機能のための品質テストは、1000の固定入力値のセットのために彼らのパフォーマンスや結果を確認含まれます。また、あなたはあなたのプログラムにそれらをファイルにこれらの値を保持しないことを決定ではなく、あなたは、ハードコード。配列は適切であろう。

JavaのAPIとのインタフェースは、1つのケースです。また、Javaの配列Scalaの配列とは異なり、そのためのリストの上に任意の利点を持っていないので、不変とされています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top