Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将一组映射键转换为数组列表_Java - Fatal编程技术网

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正试图这样做。