如何将Map的键集合作为数组列表?
我正在按如下方式初始化地图:
Map foo = new HashMap<Character,Integer>();
添加值后,我试图将我的密钥放入ArrayList中,如下所示:
ArrayList<Character> bar = new ArrayList<Character>(foo.keySet());
但是,编译器抛出以下错误:
warning: [unchecked] unchecked conversion
ArrayList<Character> bar = new ArrayList<Character>(foo.keySet());
^
required: Collection<? extends Character>
found: Set
我知道它需要转换密钥集,但我不知道如何实现它,因为我看到的keySet()的所有示例都遵循我使用过的方法。
答案 0 :(得分:0)
只需使用泛型来声明foo
:
Map<Character,Integer> foo = new HashMap<Character,Integer>();
然后,foo.keySet()
将拥有正确的通用类型Set<Character>
,从而解决问题。
答案 1 :(得分:0)
您的Map foo
引用不是通用的(它是原始的),因此编译器无法安全地假设它始终保持HashMap<Character,Integer>
(它也可以保存HashMap<String,Integer>
)。
因此foo.keySet()
不会返回通用Set<Character>
,而是返回原始Set
,但是
ArrayList<Character>
的构造函数需要收集Character
(或来自字符的派生类型集合 - 换言之Collection<? extends Character>
),原始Set
无法表示。
要解决此问题,您需要通过
在foo
引用中明确设置泛型类型
Map<Character, Integer> foo = new HashMap<Character, Integer>();
// ^^^^^^^^^^^^^^^^^^^^ - add this
答案 2 :(得分:-1)
您需要一个集合而不是列表来存储您的密钥
Set<Character> bar = new HashSet<Character>(foo.keySet());