• ベストアンサー

ArrayListの要素数の上限

java で ArrayListの要素数の上限はいくつでしょうか? ネットで検索したところ C# の ArrayList は 2^32 - 1 のようですけど・・・。 たて、よこ 2^64 の巨大な実数値行列があって、これの固有値を求めるプログラムを作ることになっています。 最初は double の2次元配列で行列を作ろうと思ったのですが、double配列の要素数は 2^32-1 個が限界であきらめました。別の方法を探しているところなのです。 パソコンのメモリは24GBにしてOSも64bit Windowsにしたので java が対応できれば大丈夫かと思うのですが・・・ よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答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等を使った方が良いかもしれません。

white-tiger
質問者

お礼

ありがとうございます。 > ただ2^32個のdouble(8バイト)はその値を格納するだけで32GBのメモリーが必要です。 なんと! > ※もし、データの存在率が低いのであればキーをx,yとするHashMap等を使った方が良いかもしれません。 なるほど。HashMapってそういう意義もあるのですね。 大変勉強になりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • salsberry
  • ベストアンサー率69% (495/711)
回答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である(疎行列)などの条件がつかないと、現代のコンピュータでは扱えないと思います。

white-tiger
質問者

お礼

非常に分かり易い説明をありがとうございます。 地球全体のHDDでもだめとは・・ (たとえも分かり易くて面白かったです!)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 配列を扱うのが面倒(要素数とか考えるのが)で、ついArrayListや

    配列を扱うのが面倒(要素数とか考えるのが)で、ついArrayListやHashMapを多用してしまうのですが、何かまずいことがあるでしょうか?重かったりするのでしょうか?

    • ベストアンサー
    • Java
  • arrayListの要素を参照出来ません。

    arrayListの要素を参照出来ません。 ( 参照→とり急ぎ、System.out.printlnで表示させたいという事。) JBuilderを使用しているので、値が入っている事は確認出来ました。 arrayListは2次元になっています。 過去の書き込みを見たのですが、応用するまでの理解力がない為か どうもピンと来ません。 周りにはJavaの経験者がいない為、誰にも質問できずに困っています。 ネットでも調べたのですが、上記の理由からかよく分からないのです。 よろしくお願いします。 Windows2000 J2SDKは1.4 JBuilderの8を使用しています。

    • ベストアンサー
    • Java
  • ArrayListの使い方がわかりません。(超初心者です。)

    情報管理用のクラス[Hito]を作成する。 プロパティ  String name double taijyu double sincho double nenrei ・メインクラスでHitoをArrayListに5つ格納し、それぞれの値を表示させるという課題に挑んでいます。 2週間前からjavaを勉強し始めたばかりで、ようやくオブジェクト指向や、クラスというものどんなものか多少イメージがわいてきた程度です。ArrayListについては配列と違い、格納するデータ数の数をはじめから決めなくてもいいというぐらいしかわかっていません。(これでさえ違うかも?)  どのように組みはじめばいいか、そしてArrayListはどのように使えばいいのか教えていただけますか? よろしくお願いします。

    • ベストアンサー
    • Java
  • 二次元配列における要素数のはじき出し

    普通、配列の要素数を出すとき $num = @list; で良いですよね? ですが、二次元配列で、 $num = @list[1]; って形にするとエラーになります。 どうすればいいのでしょうか?

    • ベストアンサー
    • Perl
  • 配列の最大要素数

    はじめまして。 早速ですがjavaの配列のことなんですが 最大要素数が255に設定されているのですが これは何故か理由を知っている方がいたら教えてください javaにはあまり関係ないことなのかもしれませんが・・・

    • ベストアンサー
    • Java
  • ArrayListの質問。

    ロジックの質問なのですが、、 ValueObjectクラス  private boolean flg = false;  private String strYMD; それぞれgetter/setter あらかじめ、aValの方にsetterで、20040626とセットします。 このオブジェクトをArrayListへaddしていきます。 ここで、String[] strYMDArray ={"20040623","20040626","20040622"}; という配列があります。 このとき、ArrayListの中身の要素数でループさせて、 配列strYMDArrayの日付と、ArrayList内のValueObjectの日付を比較し、同じであれば、 ValueObjectのflgをセットし、再度、ArrayListへつめなおしてやらなければなりません。 しかし、うまい方法を思い浮かべることができません。 どうか、うまい方法をおしえてくださいませんでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Java
  • 配列の要素数を調べる方法

    配列の中にいくつ要素があるか後から調べる方法はあるでしょうか? int test[4][3] = {   {0,1,2},   {0,1,2},   {0,1,2},   {0,1,2}, } ; 上のケースだと、X方向に3、Y方向に4つの 要素があります。しかし、これだとあらかじめいくつ要素があるかを決めて 置かないといけません。 例えば、 int test[] = {0,1,2,3....} みたいに宣言された場合や、 char *test[] = {   "ああああああ",   "いいいいいい",   "うううううう",      ・      ・ //(これは文字列の数を要素数とします) } ; のように宣言された二次元配列などで、後から配列内にいくつ要素があるかを 調べることなどは可能でしょうか?

  • VB.NET の配列の要素数

    VB.NETで List(Of String()) の多次元配列を宣言したとします。 Listの要素数とListの中のStringの要素数はどのように確認すれば わかるでしょうか? どうぞ、よろしくお願いいたします。

  • ArrayListに多次元配列

    ArrayListに多次元配列の変数を格納したのですが、取り出し方がわからず困っています。 ----------------------------------------------- String[][] str = {{"aaa","bbb","ccc","ddd","eee","fff"}, {"aaa","bbb","ccc","ddd","eee","fff"}, }}; ArrayList array = new ArrayList(); array.add(str[0]); array.add(str[1]); ----------------------------------------------- 上記の場合で、str[0][2];を取得する方法がわかりません。 java初心者なのでおかしな質問かもしれませんが、宜しくお願いします。

    • ベストアンサー
    • Java
  • 要素数・要素の値が未定の配列の宣言について(C言語)

    要素数・要素の値が未定の配列の宣言について(C言語) タイトルの通りプログラムの内容上、要素の数とその数値がプログラムの途中で算出されるため 最初の宣言の段階では両方ともその数が未定です。 こういった場合、配列の宣言はどのようにすればよろしいのでしょうか? どなたか教えていただけるととても助かります。よろしくお願いします。