java - HashSet "cannot convert from element type Object to Integer"期望整数的 HashSet

标签 java set hashset

在下面的代码中,我期望 pn.get(8).get(8) 返回一个 Integers 数组(在这个例子中,数组的长度是 1,但在我的程序中它更长)。相反,我得到了一组 Objects

谁能告诉我为什么以及我做错了什么。

ArrayList<ArrayList<HashSet<Integer>>> pn =
    new ArrayList<ArrayList<HashSet<Integer>>>();

for (int x = 0; x < 9; x++) 
{
    pn.add(x, new ArrayList<HashSet<Integer>>());

    for (int y = 0; y < 9; y++) {
        pn.get(x).add(y, new HashSet<Integer>());
        pn.get(x).get(y).add(new Integer(x));
    }
}


for (Integer i: pn.get(8).get(8).toArray())
{
    System.out.println(i);
}

最佳答案

您需要做的就是删除 for 语句中的 toArray() 调用,它返回 Object[] 而不是 Integer[] 如您所料。这是 Java implements generics using type erasure 的 Artifact .运行时,JVM 不知道你的 HashSetInteger 类型,所以 toArray() 必须返回一个数组 对象[]

值得庆幸的是,HashSet 可以直接迭代,因此不需要调用 toArray()。以下对我有用:

ArrayList<ArrayList<HashSet<Integer>>> pn = new ArrayList<ArrayList<HashSet<Integer>>>();

for (int x = 0; x < 9; x++) 
{
    pn.add(x, new ArrayList<HashSet<Integer>>());

    for (int y = 0; y < 9; y++) {
        pn.get(x).add(y, new HashSet<Integer>());
        pn.get(x).get(y).add(new Integer(x));
    }
}


for (Integer i: pn.get(8).get(8))
{
    System.out.println(i);
}

关于java - HashSet "cannot convert from element type Object to Integer"期望整数的 HashSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16079525/

相关文章:

java - 如何获得MySQL员工实践?

Java:将具有重复项的复杂对象中的两个列表合并为一个有序列表

java - 显示文本文件的第一行和最后一行?

c++ - STL 设置自定义排序功能在 Quicy 2005 中有效,但在 MS Studio 2010 中无效

java - 递归方法调用

php - 在php中获取设置属性

c - set_intersection 适用于整数,但不适用于字符,即使它是 void*

java - 哈希集添加方法无法正常工作

java - 具有两个相等对象的 HashSet?

java - 创建扩展哈希集/继承的计数类