java.lang.ClassCastException : java. util.Arrays$ArrayList 无法转换为 java.lang.Integer

标签 java arrays exception arraylist foreach

void topologicalSortUtil(int v, boolean visited[], Stack<Integer> stack, ArrayList<Integer>[] adj) {
        visited[v] = true;
        for (int i : adj[v]) {
            if (!visited[i]) {
                topologicalSortUtil(i, visited, stack, adj);
            }
        }

        stack.push(v);
    }

这里,我调用的是arraylist的数组。正如我的 IDE (IntelliJ) 所告诉的,错误出现在增强的 for 循环中。这似乎是一个完全有效的调用,因为 adj[v] 将返回一个 ArrayList 和整数 i 捕获数组中的每个元素,然后在递归调用中处理它们。

@Alex Shesterov 等人, 以下是生成 adj 的代码。

    ArrayList[] arr = new ArrayList[n+1];
        for(int i=0; i<=n; i++){
            arr[i] = new ArrayList<Integer>();
        }
        arr[1].add(Arrays.asList(8,6,2));
        arr[2].add(Arrays.asList(7));
        arr[3].add(Arrays.asList(6));
        arr[4].add(Arrays.asList(5,2));
        arr[5].add(Arrays.asList(4,2,3));
        arr[6].add(Arrays.asList(3,2,5));
        arr[7].add(Arrays.asList(2));
        arr[7].add(Arrays.asList(1,2,4));

最佳答案

生成数组的代码不正确且类型不安全。您可能会从编译器收到有关“不安全类型”或“原始类型”的警告。以下是原始类型的使用:

ArrayList[] arr = new ArrayList[n+1];

您永远不应该使用类型 ArrayList没有某种类型声明。

然后初始化 arr 的每个元素成为ArrayList<Integer> 。但由于它被分配给原始类型数组元素,编译器不知道该元素是 ArrayList<Integer>并且不会警告您下一步,这是不好的一步:

arr[1].add(Arrays.asList(8,6,2));

您将一个元素添加到 arr[1] 中的列表中。 add方法添加一个 single 元素,这是传递给它的对象。那个物体是什么?这是一个 List ,由 Arrays.asList(...) 制作.

所以不要有 ArrayList<Integer>你有一个原始的ArrayList它有一个元素,并且该元素是一个整数列表。当然,这不能转换为 Integer .

而不是使用 add你应该使用addAlladdAll方法将其接收到的集合中的所有元素添加到调用它的集合中。

arr[1].addAll(Arrays.asList(8,6,2));

最好不要混合数组和列表,而是传递列表列表并为其指定适当的类型。

尝试避免原始类型并消除代码中的所有原始类型或不安全类型警告(不是@SupressWarnings!),除非您开始为泛型集合编程库并且您知道自己在做什么。

关于java.lang.ClassCastException : java. util.Arrays$ArrayList 无法转换为 java.lang.Integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40343971/

相关文章:

java - Java 中每次鼠标单击都会更改字符串的字体

python - 捕获除用户中止之外的所有异常

java - 为什么我的环境变量被错误地处理为 JVM 选项?

java - 阶乘上限

java - Android 通知重要性无法更改

php - 在使用 PDO 的结果中使用列的值作为索引

javascript - 我如何知道javascript中排序数组的名称

c# - 如何通过 Entity Framework 存储可变二维数组?

java - 用于权限异常的内置java异常类型

Java - 异常处理 - 如何重新输入无效输入