Java:我们可以将一个集合投射到一个arraylist吗?

时间:2014-12-10 13:13:22

标签: java arraylist casting set type-conversion

我有hashmap名为gg。我想使用keySet()方法取出它的密钥,并将它们作为另一个方法的参数传递。

method_A( gg.keySet());

public void method_A(ArrayList<Integer> jj){
 ....
}

但是我收到了这个错误: error: incompatible types: Set<Integer> cannot be converted to ArrayList<Integer>

然后我看到了这个:

method_A (new ArrayList<Integer>(gg.keySet()));

它到底在做什么?看起来像是铸造给我。我很困惑。有人可以向我解释发生了什么事吗?

1 个答案:

答案 0 :(得分:2)

new ArrayList<Integer>(gg.keySet())不是类型转换。它更像是一个复制构造函数(虽然实际的复制构造函数通常采用的是与实例化相同类型的参数,但这不是这种情况。)

它正在使用接受ArrayList<Integer>作为参数的构造函数创建一个新的Collection实例。它会将Collection中找到的所有元素添加到新ArrayList

这是构造函数的文档:

   /**
     * Constructs a list containing the elements of the specified
     * collection, in the order they are returned by the collection's
     * iterator.
     *
     * @param c the collection whose elements are to be placed into this list
     * @throws NullPointerException if the specified collection is null
     */
    public ArrayList(Collection<? extends E> c)