2012-10-26 16 views
14

Scalaでプリミティブを使用できますか?Scalaでプリミティブを使用するにはどうすればよいですか?

ユースケースは数十億の整数を格納するためのものです。したがって、4バイト(整数の場合)と16バイト(整数の場合)の違いが重要です。

+6

scalaは可能なときにプリミティブにコンパイルします(Array [Int] => int []など) – Arjan

+0

文字通り何十億ものintがある場合、プリミティブを使用してもメモリの問題に遭遇する可能性があります要素のint ref(〜2bn elems)を必要とすることによって、JVM上で配列の制限があります。あなたのデータをストリーミングするか、代わりにデータベースを使用することを考えてください。 –

答えて

14

あなたはScalaはアンボクシングプリミティブを保存したい場合は、Array[Int]を使用することができますが(それがボクシングを強制するため)、その上に任意のクールなScalaの収集方法の使用を控えます。

プリミティブタイプの不変なコレクションを探す場合は、特殊なバッファ、セット、マップを提供するDeboxをご覧ください。プロジェクトはまだ進化していますが、非常に有望です。

+0

Deboxコンテナを不変に呼び出すのは正しいとは思わない。しかし、Deboxは、良いパフォーマンスと、特にボクシングなしで、Scalaの可変性の機能を提供することを難しくしています.Buffer、Map、およびSet(たとえば自動拡張)。 –

12

@specialised注釈を使用すると、コンパイラがクラスの特殊インスタンスを作成できるようになります。 this articleを参照してください。

class Container[@specialized(Int) T](value: T) { 
    def apply(): T = value 
} 
関連する問題