Java 如何将一组映射键转换为数组列表
如何将地图的键集合作为数组列表放置 我正在初始化地图,如下所示:Java 如何将一组映射键转换为数组列表,java,Java,如何将地图的键集合作为数组列表放置 我正在初始化地图,如下所示: Map foo = new HashMap<Character,Integer>(); ArrayList<Character> bar = new ArrayList<Character>(foo.keySet()); 添加值后,我将尝试将密钥放入ArrayList,如下所示: Map foo = new HashMap<Character,Integer>(); Array
Map foo = new HashMap<Character,Integer>();
ArrayList<Character> bar = new ArrayList<Character>(foo.keySet());
添加值后,我将尝试将密钥放入ArrayList,如下所示:
Map foo = new HashMap<Character,Integer>();
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
我知道它需要转换密钥集,但我不知道如何实现,因为我看到的所有密钥集示例都遵循我使用的方法。只需使用泛型来声明foo:
然后,foo.keySet将具有正确的泛型类型集,从而解决问题。您需要一个集而不是一个列表来存储密钥
Set<Character> bar = new HashSet<Character>(foo.keySet());
您的Map foo引用不是泛型的,因为它是原始的,所以编译器不能安全地假设它将始终保持HashMap,它也可以保持HashMap
由于此原因,foo.keySet不会返回泛型集作为结果,而是返回原始集,但是
ArrayList的构造函数需要字符集合或来自字符的派生类型集合-换句话说,集合向映射提供泛型类型:map foo=new HashMap;另一方面,除非您计划对它们进行排序或添加重复项,否则最好将它们保存在一个集合中,而不是一个列表中。列表意味着某种顺序感,这是通过keySet方法初始化列表无法获得的。虽然使用集合可能更准确,但它不是必需的,并且可以将keySet的结果添加到列表中,而OP正试图这样做。