こんにちは仲間Stackoverflowers。私はJavaの配列で遊んでいて、配列に膨大な量の値を格納しようとしています。しかし、私は配列に一定量以上の値を格納することができませんでした。Java - 配列に大量の値を格納する方法
String data[] = new String[44681003];
//何らかの理由で44681003が醜い赤いエラーメッセージを吐くまで私が行くことができる最高の番号ですコンソール:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
は、私は与えられた文字列リストのすべての順列を生成するプログラムを持っている、と私はその奇妙44680815数よりも多い数を生成する必要がするまで、それは完璧に動作します。 (例:387420489 9^9である)私は値を格納し、forループ内のコンソールにそれをプリントアウトしようとしている
、私は存在するかどうかを疑問に思ったdata[i] = null;
をゼロに戻す値を設定します大量の値を配列に格納する方法ですか?
または単に私の値をプリントアウトして、配列に格納されているからそれを削除することができること
。ここで
私のコードです:コンソールで
public class Permutations {
public static void main(String[] args) {
String database = "abcdefghi";
// String data[] = new String[(int) Math.pow(database.length(), database.length())];
// ^^ I would like to make it this long, but It gives an error.
String data[] = new String[44681003];
StringBuilder temp;
for (int i = 0;i<Math.pow(database.length(), database.length());i++){
String base = Integer.toString(i,database.length());
data[i] = base;
if (base.length()!=database.length()){
temp = new StringBuilder("");
for (int x = 0;x < (database.length()-data[i].length());x++){
temp.append('0');
}
base = temp + base;
}
for (int y = 0;y<database.length();y++){
base = base.replace((char)('0' + y), database.charAt(y));
}
data[i]=null;
System.out.println("Pos: " + i + " " + base); //<-- USE THIS TO WRITE IT OUT
}//end big for loop
System.out.println("Done");
}
}
最終ライン:
Pos: 44680997 badagahcc
Pos: 44680998 badagahcd
Pos: 44680999 badagahce
Pos: 44681000 badagahcf
Pos: 44681001 badagahcg
Pos: 44681002 badagahch
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 44681003
at Permutations.main(Permutations.java:20)
My computer specs: http://store.asus.com/us/item/201510AM160007799/A17602
- のWindows 10
- インテルCore i7の2.6GHzの4720HQ(の3.6GHzまでターボ)
- 16ギガバイトのメモリ
- 1TB HDD
- NVIDIAのGeForce GTX 970M 3ギガバイト
- 17.3インチIPS FHD(1920× 1080)G-Syncの
をサポートするには、お時間をいただき、ありがとうございます!私は解決策を見つけることができ、多分同じ/同様の質問をした他の人たちを助けることができればと思います!
ヒープ領域のメモリを増やすことができます。それはGoogleです。 –
また、コードを最適化しようとします。 'StringBuilder temp;'はループの外側で宣言できます。 –
@ YassinHajajありがとう、固定:) –