ファイルの内容を使用してマップを作成しようとすると、コードは次のようになります。
System.out.println("begin to build the sns map....");
String basePath = PropertyReader.getProp("oldbasepath");
String pathname = basePath + "\\user_sns.txt";
FileReader fr;
Map<Integer, List<Integer>> snsMap =
new HashMap<Integer, List<Integer>>(2000000);
try {
fr = new FileReader(pathname);
BufferedReader br = new BufferedReader(fr);
String line;
int i = 1;
while ((line = br.readLine()) != null) {
System.out.println("line number: " + i);
i++;
String[] strs = line.split("\t");
int key = Integer.parseInt(strs[0]);
int value = Integer.parseInt(strs[1]);
List<Integer> list = snsMap.get(key);
//if the follower is not in the map
if(snsMap.get(key) == null)
list = new LinkedList<Integer>();
list.add(value);
snsMap.put(key, list);
System.out.println("map size: " + snsMap.size());
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("finish building the sns map....");
return snsMap;
プログラムは最初は非常に高速ですが、印刷される情報が次のようになると非常に遅くなります。
map size: 1138338
line number: 30923602
map size: 1138338
line number: 30923603
....
Javaプロファイラーの代わりにBufferedReaderとHashMapのパフォーマンスを判断するために、2つのSystem.out.println()句を使用して推論しようとしています。行番号情報を取得してから地図サイズの情報を取得するのに時間がかかる場合もあれば、地図サイズを取得してから行番号情報の情報を取得するのに時間がかかる場合もあります。私の質問は:私のプログラムを遅くするのはどれですか?大きなファイルの場合はBufferedReader、大きなマップの場合はHashMap?