我可以在java中的String数组中存储多少个单词?我正在研究机器学习算法,我的要求是大约3000字。建议我处理该数据的任何替代方法,因为我已尝试使用数组,但它无法正常工作。
答案 0 :(得分:3)
您已声明接收过ArrayIndexOutOfBounds异常,这是因为您使用的数据超出了规定的数组大小
String[] strings=new String[3000];
strings[3000]="something";//causes exception because strings[2999] is the last entry.
如果您知道需要多少条目,则声明该大小的数组,或者如果您需要可扩展的数组样式容器,请使用arraylist。
ArrayList<String> strings=new ArrayList<String>();
strings.add("Something"); //can be added as many times as you want (or that available memory will allow)
ArrayLists会在您向其添加项目时自动调整大小,当您需要列表行为(即事情在一个订单中)但它们不知道您将拥有多少项目时,它们是理想的。
然后,您可以根据需要从列表中检索项目,最常见的方法是;
String string=strings.get(0); //returns the first entry
int size=strings.size(); //tells you how many items are currently in the array list
您可以通过告诉它预期的大小来提高ArrayList的性能,所以ArrayList<String> strings=new ArrayList<String>(3000);
但这完全是可选的
答案 1 :(得分:0)
您可以使用以下代码找到在JVM上处理的内存量:
long maxBytes = Runtime.getRuntime().maxMemory();
System.out.println("Max memory: " + maxBytes / 1024 / 1024 + "M");
请注意,如果您想知道数组中可以包含多少字符串,请将整数除以~64,即String的平均长度。 (计算所有参考文献等)。
System.out.println("Max words: " + maxBytes / 64 + " words");
如果你有普通的机器,你应该至少有2GB RAM用于分配变量,平均单词约为30亿。