2014-10-02 122 views
0

如何将我的映射键的集合作为数组列表?如何将一组映射键转换为数组列表

我初始化图如下:

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

供应泛型类型到您的地图:'地图<字符,整数>富=新的HashMap <字符,整数> ();' – hoefling 2014-10-02 23:58:35

+0

顺便说一句,除非你打算对它们进行排序或添加重复项,否则最好将它们保存在一个'Set'而不是'List'中。一个'List'意味着某种排序的感觉,你不会通过'keySet'方法初始化你的列表。 – Krease 2014-10-03 16:29:14

回答

0

只需使用仿制药的foo声明:

Map<Character,Integer> foo = new HashMap<Character,Integer>(); 

然后,foo.keySet()将有正确的泛型类型Set<Character>,解决了这个问题。

-1

你需要一套不是列表来存储您的钥匙

Set<Character> bar = new HashSet<Character>(foo.keySet()); 
+0

虽然使用“Set”可能更准确,但并不是必需的,keySet()的结果可以添加到List中,这是OP正在尝试做的。 – Krease 2014-10-03 16:32:01

0

Map foo引用不是一般的(这是生的),因此编译器不能安全地假定它会永远保持HashMap<Character,Integer>(它可以也持有HashMap<String,Integer>)。

由于这种foo.keySet()的不返回通用Set<Character>作为结果,但生Set,但 构造的ArrayList<Character>预计Character集合(或派生类型从字符集 - 换句话说Collection<? extends Character>),其生Set可以” t代表。

为了解决这个问题,你需要在你的foo参考明确设置泛型类型,通过

Map<Character, Integer> foo = new HashMap<Character, Integer>(); 
// ^^^^^^^^^^^^^^^^^^^^ - add this 
相关问题