将文件读入HashMap Java

时间:2016-03-08 09:31:32

标签: java file hashmap

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

    v = foo()
TypeError: 'staticmethod' object is not callable

这是文件kemal.txt中的一个例子:

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");
    }
  }
}

我的问题是如何才能将这些行有效地读入Hashmap?因为文件的大小约500MB。提前谢谢。

1 个答案:

答案 0 :(得分:1)

正如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条件时。开始调整影响您标准的部分。