【发布时间】:2018-05-24 07:19:32
【问题描述】:
我测试了下面的代码。我预计会出现编译错误,因为我命令编译器复制“Set”。详细地说,“Hashmap.keySet()”返回“Set”而不是“List”。我曾经知道“Set”与基于上述结构的“List”不兼容。你能告诉我这段代码是如何工作的吗?
List<String> h = new ArrayList<String>(HashMap<>.keySet());
【问题讨论】:
-
The
ArrayListconstructor 接受任何Collection。任何集合都可以迭代,因此构造函数可以迭代集合并将每个元素添加到列表中。 -
正是 khelwood 所说的。
ArrayList的构造函数只是按照Collection的迭代器返回它们的顺序获取元素。由于Set是Collection的子类,它工作得很好。 -
HashMap<>.keySet()这是不正确的。你正在调用keySet,一个实例方法,就好像它是一个静态方法一样。 -
谢谢大家的解释>
标签: java list collections set