
java で ArrayListの要素数の上限はいくつでしょうか?
ネットで検索したところ C# の ArrayList は 2^32 - 1 のようですけど・・・。
たて、よこ 2^64 の巨大な実数値行列があって、これの固有値を求めるプログラムを作ることになっています。
最初は double の2次元配列で行列を作ろうと思ったのですが、double配列の要素数は 2^32-1 個が限界であきらめました。別の方法を探しているところなのです。
パソコンのメモリは24GBにしてOSも64bit Windowsにしたので java が対応できれば大丈夫かと思うのですが・・・
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
JavaのArrayListもインデックス値はintを使っているようですので、2^32個になると思います。
(C++のstd::mapならsize_tなので64bit化は可能。)
ただ2^32個のdouble(8バイト)は
その値を格納するだけで32GBのメモリーが必要です。
このような巨大なデータを扱う場合は
HDD等のストレージを利用した方が良いと思います。
0000100000.dat 0~1000000のデータを格納(8メガバイト)
0000200000.dat
0000300000.dat
0000400000.dat
>たて、よこ 2^64 の巨大な実数値行列
仮に2^64個のdouble値データが存在するとして、それを保存するストレージはあるでしょうか?
100EBを超えると思います。
※もし、データの存在率が低いのであればキーをx,yとするHashMap等を使った方が良いかもしれません。
ありがとうございます。
> ただ2^32個のdouble(8バイト)はその値を格納するだけで32GBのメモリーが必要です。
なんと!
> ※もし、データの存在率が低いのであればキーをx,yとするHashMap等を使った方が良いかもしれません。
なるほど。HashMapってそういう意義もあるのですね。
大変勉強になりました。
No.2
- 回答日時:
ArrayListクラスのsize()の返値型やget()の引数型がintなので、2^31か2^31-1が上限でしょう。
> たて、よこ 2^64 の巨大な実数値行列
まともにこのサイズのdoubleの2次元行列を作ると、2^131バイトのメモリを必要とします(64+64+3=131)。
2008年に全世界で出荷されたHDDの数が5億台強 (≒2^29) だということですから、それら全てが1TBの容量を持っていたと仮定しても、合計でたった2^69バイトです。24GBメモリ、64ビットWindowsくらいじゃ全く太刀打ちできませんね。
行列自体は巨大だが、ほとんど全ての要素の値が0である(疎行列)などの条件がつかないと、現代のコンピュータでは扱えないと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DateTimePickerに値を入れたい...
-
hiddenの値を消したくない!
-
C# LinqでDateTime型の値を取得
-
DOSバッチで変数の値を変数名に...
-
WinInet.dllを利用したHttpQuer...
-
C言語の変数(LSB)の合わせ込...
-
Javaを使って、string型の年月...
-
wsprintf関数の使い方について
-
getParameterの値変更
-
Ecliseのpropertiesの文字化け
-
Javascriptでマシン固有の情報...
-
ダブルクォーテーションを含む...
-
ArrayListの要素数の上限
-
日付や時刻の"01"を" 1"に変換...
-
javaのCSVデータ読込についてです
-
PSQLExceptionが発生する
-
System.err. printlnとSystem.o...
-
オブジェクトの中のプロパティ...
-
変数を動的に利用するには?
-
IF関数でEmpty値を設定する方法。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ArrayListの要素数の上限
-
JSPでの計算結果表示
-
javaのCSVデータ読込についてです
-
JSPでHashMap・配列の変数の値...
-
DateTimePickerに値を入れたい...
-
ダブルクォーテーションを含む...
-
matchesを否定文として使う方法...
-
wsprintf関数の使い方について
-
Stringクラスの変数の格納アド...
-
ResultSetの内部構造(Java)
-
C言語の変数(LSB)の合わせ込...
-
excel vba 時間計算と条件分岐...
-
JavaScriptの変数の値が消える!?
-
String型の値が大文字か小文字...
-
実行シェルからCOBOLへパラメー...
-
Request.formの値の初期化
-
VB6,論理演算子Orの使い方がわ...
-
DOSバッチで変数の値を変数名に...
-
char型での演算子
-
日付や時刻の"01"を" 1"に変換...
おすすめ情報