Java、Hashmap、数据类型转换

Java、Hashmap、数据类型转换,java,file-io,hashmap,type-conversion,Java,File Io,Hashmap,Type Conversion,我将阅读一个包含文本文件(总共7GB)的文件夹(wiki pmi),并将它们放在hashmap中。文本文件的每一行如下所示:0.1321 我编写了以下代码: HashMap<String,Double> pmi = new HashMap<String,Double>(); File folder = new File("wiki-pmi"); String line; File[] listofFiles = folder.listFiles(); for(File f

我将阅读一个包含文本文件(总共7GB)的文件夹(wiki pmi),并将它们放在hashmap中。文本文件的每一行如下所示:0.1321

我编写了以下代码:

HashMap<String,Double> pmi = new HashMap<String,Double>();
File folder = new File("wiki-pmi");
String line;
File[] listofFiles = folder.listFiles();
for(File file: listofFiles)
{
if(file.isFile())
{
BufferedReader br1  = new BufferedReader(new FileReader(file));

while((line=br1.readLine())!=null)
{
String[] split=line.split(" ");
pmi.put(split[0]+ ","+ split[1], Double.parseDouble(split[2]));
}
}
}
这意味着(java:30)到


我想我无法从字符串类型转换为双精度类型,对吗?

首先,为地图添加容量:

HashMap<String,Double> pmi = new HashMap<String,Double>(2000);
HashMap pmi=newhashmap(2000);
默认容量为16,每次需要增加时都会翻倍(16..32..64..128..256..)

将所有内容加载到地图中是个坏主意,您应该使用临时数据库


关于您的转换和优化,您能给出示例行吗?

Split[3]超出范围。。
由于字符串拆分函数将返回一个大小为3、startIndex=0的数组,所以不应该是pmi.put(拆分[0]+“,“+split[1],Double.parseDouble(拆分[2])?您正在尝试使用长度为3(以0开头)的Foruth emelent数组。谢谢,还有其他方法可以在hashmap中放置带有“0.1321”的文本文件吗?我认为您这样做是正确的。您可以使用正则表达式,但在这种情况下,它将比简单拆分()更复杂@Barteks2x根据例外情况,它指向索引1。检查拆分的大小[]在使用之前。如果它不是您期望的大小,请打印出来并停止,以便查看是否有不良数据。感谢您的评论…我将其更改为2000,但尚未工作。我不明白示例的含义。但是文本文件中的每行如下:批批处理0.3992批处理0.5732批处理批处理0.4788批处理槽0.1132批处理槽0.1406批处理营0.1406每行有三个标记槽,但写入错误。我已将其更改为2,但问题仍然相同。
pmi.put(split[0]+ ","+ split[1], Double.parseDouble(split[3]));
HashMap<String,Double> pmi = new HashMap<String,Double>(2000);