只是想知道为什么我在matches.set(count,size)运行什么基本上是深度优先搜索算法后得到indexoutofboundsexception?
当我尝试在arraylist中的位置0处运行它时出现错误,这在默认索引处看起来很奇怪。
public void findInheritance(HashMap<String, ArrayList<String>> h, ArrayList<String> a) {
Queue<String> search = new LinkedList();
ArrayList<Integer> matches = new ArrayList<Integer>();
int count = 0;
String toBeSearched;
int size = 0;
for (String key: a) {
size = 0;
if (h.get(key).size() > 0 || h.get(key) == null) {
search.addAll(h.get(key));
while (search.size() > 0) {
size++;
toBeSearched = search.poll();
if (h.get(toBeSearched).size() > 0) {
search.addAll(h.get(toBeSearched));
}
}
}
matches.set(count, size);
count++;
}
int smallcount = 0;
for (String b: a) {
System.out.println(b);
System.out.println(matches.get(smallcount));
smallcount++;
}
}
答案 0 :(得分:3)
ArrayList<Integer> matches = new ArrayList<Integer>();
[...]
matches.set(count, size);
列表为空,因此索引count
没有任何内容,因此无法替换。
此外,
if (h.get(key).size()>0 || h.get(key) == null) {
这一行是错误的:如果h.get(key)
可以为null,那么它将导致NullPointerException。您还应该调用get()
一次并将结果存储在变量中。
答案 1 :(得分:0)
噢,我的话。我使用.set而不是.add,而ArrayList是空的。我的错。感谢您的快速回复。