迭代ArrayLists的ArrayList时出现问题

时间:2015-12-12 12:55:39

标签: java for-loop arraylist

我正在尝试迭代ArrayLists的ArrayList - 但不知怎的,一切都在我身上失败,我不明白错误信息。

错误是:

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.util.ArrayList

我尝试过使用常规for(int i; i< lists.length; i ++)但是得到了同样的错误。我想要做的就是检查“lists”中的任何ArrayLists是否包含整数“v”。

public static boolean listsContains(ArrayList<ArrayList<Integer>> lists, int v) {
    boolean b = false;

    for (ArrayList<Integer> list : lists) {
        if (list.contains(v)) {
            b = true;
        } else {
            b = false;
        }
    }
    return b;
}

导致错误的实际行是“for(ArrayList list”...

编辑:为了清楚起见,我在代码中编辑了更多的声明性泛型(不幸的是,它与我发布的第一个代码一样少)。

Edit2:好的,所以它不是方法本身导致问题所以根据请求这里填充这些列表的其余代码。代码没有完成,但我在完成它时遇到了这个问题。

public static void main(String[] args) {
    Graph g = DataSource.load();

    ArrayList<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>();

    for(int i = 0; i < g.numberOfVertices(); i++) {
        if(!(listsContains(lists, i))) {    // add list if node is unlisted (since after first iteration one entire network is found)
            listsCreate(lists, i);
        }

        Iterator it = g.adj(i).iterator();  // create iterator for current node's edges

        if (!(it.hasNext())) {   // node has no edges
            listsCreate(lists, i);
        } else {                // node has edges, iterate through them
            while(it.hasNext()) {
                Edge current = (Edge) it.next();
                if(!(listsContains(lists, current.to))) {   // unlisted node
                    int index = listsIndexOf(lists, current.from);
                    findNetwork(g, lists.get(index), current.to);
                } else {
                    continue;       // node already listed
                }
            }
        }
    }

    System.out.println("Number of connected graphs: " + lists.size());

}   // Main

2 个答案:

答案 0 :(得分:1)

您没有指定内部ArrayList的组件&#39;类型。从您的日志中我可以看出它包含Integer s:

public static boolean listsContains(ArrayList<ArrayList<Integer>> lists, int v) {

    for (ArrayList<Integer> list : lists) {
        if (list.contains(v)) 
            return true;
    }

    return false; // No inner arrayList contains 'v'
}

编辑:

或使用Java 8:

public static boolean listsContains(ArrayList<ArrayList<Integer>> lists, int v) {
     return lists.stream().anyMatch(list -> list.contains(v));
}

答案 1 :(得分:1)

因为你测试:

list.contains(v)的

list的类型为ArrayList,没有内部类型

v是int

用ArrayList替换你的ArrayList&lt;整数&gt;