我正在尝试创建一个邻接列表来存储图形。该实现在存储 100,000 条记录时运行良好。但是,当我尝试存储大约 100 万条记录时,我遇到了 OutofMemory 错误:
线程“主”java.lang.OutOfMemoryError 中的异常:java.io.BufferedReader 的 java.lang.String.(String.java:215) 处的 java.util.Arrays.copyOfRange(Arrays.java:3209) 处的 Java 堆空间.readLine(BufferedReader.java:331) 在 java.io.BufferedReader.readLine(BufferedReader.java:362) 在 liarliar.main(liarliar.java:39)
以下是我的实现
HashMap<String,ArrayList<String>> adj = new HashMap<String,ArrayList<String>>(num);
while ((str = in.readLine()) != null)
{
StringTokenizer Tok = new StringTokenizer(str);
name = (String) Tok.nextElement();
cnt = Integer.valueOf(Tok.nextToken());
ArrayList<String> templist = new ArrayList<String>(cnt);
while(cnt>0)
{
templist.add(in.readLine());
cnt--;
}
adj.put(name,templist);
} //done creating a adjacency list
我想知道,是否有更好的方法来实现邻接列表。另外,我一开始就知道节点的数量,并且将来我在访问节点时会展平列表。有什么建议么 ?
谢谢