【发布时间】:2018-08-19 11:57:29
【问题描述】:
我的问题陈述:
在一个文件中会有一组单词(>5000 个单词)。我们需要在每个字符串(字谜集)中返回一个以逗号(,)分隔的字谜列表 eg:[alter,later,part,trap,bow,below,listen,silent,tensil]
例外:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3210)
at java.util.Arrays.copyOf(Arrays.java:3181)
at java.util.ArrayList.grow(ArrayList.java:265)
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:239)
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:231)
at java.util.ArrayList.add(ArrayList.java:462)
at FindAnagrams01.anagramsList(FindAnagrams01.java:25)
at FindAnagrams01.main(FindAnagrams01.java:7)
我的代码是:
public static List<String> anagramsList(String filePath) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(filePath));
String str = br.readLine();
List<List<String>> result = new ArrayList<List<String>>(10000);
HashMap<String, ArrayList<String>> map = new HashMap<String,ArrayList<String>>(10000);
while(str != null) {
char[] arr = new char[26];
for(int i = 0; i < str.length(); i++) {
arr[str.charAt(i) - 'a']++;
}
String ns = new String(arr);
if(map.containsKey(ns)){
map.get(ns).add(str);
} else {
ArrayList<String> al = new ArrayList<String>(10000);
al.add(str);
map.put(ns, al);
}
}
br.close();
result.addAll(map.values());
String res[] = new String[10000];
for(int i = 0; i < result.size(); i++) {
int isIntial = 0;
for(String j : result.get(i)) {
if ((result.get(i).size()) > 1) {
if (isIntial == 0) {
res[i] = j;
isIntial = 1;
}
else
res[i] += "," + j;
}
}
}
List<String> angrms = new ArrayList<String>(10000);
for (int i = 0; i < res.length; i++) {
if (res[i] != null)
angrms.add(res[i]);
}
return angrms;
}
【问题讨论】:
-
HashMap<String,arrayList<String>>- 什么?您是否手动输入了此代码?什么是arrayList?任何你为什么将所有内容都设置为 10,000?这是你最喜欢的号码吗? -
你为什么在
char[]上打电话给++??arr[str.charAt(i) - 'a']++. -
这段代码很奇怪,有很多方法——目前它不能编译,更不用说抛出任何
Exceptions。 -
你有一个循环
while(str != null) {但在里面你永远不会改变 str,所以它永远不会结束 -
在 char[i]++ 中。我实际上正在设置一个唯一的字符串来查找该特定键的字谜,并且我想将我的文件限制为 10000 个单词。
标签: java file exception arraylist out-of-memory