繁体   English   中英

将文件读入 HashMap Java

[英]Read file into HashMap Java

我正在尝试将文件中的行读入 Arraylist。 这是我的作家:

private Map<Integer, ArrayList<Integer>> motPage = 
                                             new HashMap<Integer, ArrayList<Integer>>();

private void writer() throws UnsupportedEncodingException, FileNotFoundException, IOException{

  try (Writer writer = new BufferedWriter(
                          new OutputStreamWriter(
                             new FileOutputStream("/home/kdiri/workJuno/motorRecherche/src/kemal.txt"), "utf-8"))) {
    for(Map.Entry<Integer, ArrayList<Integer>> entry : motPage.entrySet()){
      writer.write(entry.getKey() + " : " + entry.getValue() + "\n");
    }
  }
}

这是文件 kemal.txt 中的示例结果:

0 : [38, 38, 38, 38, 199, 199, 199, 199, 3004, 3004, 3004, 3004, 23, 23]

我的问题是如何将这些行有效地再次读入 Hashmap 中? 因为文件大小约为 500MB。 先感谢您。

正如 JonSkeet 所说,你应该从一些工作开始。 在下面找到一种可能的方法。 该代码段非常冗长以显示原理。

String line = "0 : [38, 38, 38, 38, 199, 199, 199, 199, 3004, 3004, 3004, 3004, 
    23, 23]";

int firstSpace = line.indexOf(" ");
int leftSquareBracket = line.indexOf("[");
int rightSquareBracket = line.indexOf("]");

String keyString = line.substring(0, firstSpace);        
String[] valuesString = line.substring(leftSquareBracket + 1, rightSquareBracket)
    .split(", ");

int key = new Integer(keyString);
List<Integer> values = new ArrayList<>(valuesString.length);
for (String value : valuesString) {
    values.add(new Integer(value));
}

Map<Integer, List<Integer>> motPage = new HashMap<>();
motPage.put(key, values);

顺便提一句。 read ... these lines efficiently into Hashmap取决于您的要求。 效率可以是例如:

  • 大文件读取速度
  • 字符串到整数的转换速度
  • 字节码的小尺寸
  • 更少的对象生成
  • ......还有其他的

当代码段不符合您的efficiency标准时。 开始调整影响您的标准的部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM