猿问

提取 ArrayList<String> 的元素作为 Hashmap 的一部分

我有以下代码:


for (Map.Entry < Integer, ArrayList < String >> entry: data.entrySet()) {

    Integer key = entry.getKey();

    ArrayList < String > value = entry.getValue();

    for (String aString: value) {

        System.out.println("key : " + key + " value : " + aString);

    }

}

Hashmap 声明为


Map<Integer, List<String>> data = new HashMap<>();

在通过循环和put方法填充它之前。


我现在需要迭代ArrayList字符串或更好地,通过索引检索特定元素 .. 进行操作。我已经尽我所能进行了研究,似乎已经找到了答案,上面的代码。它是从前段时间在这里给出的答案中复制的。


但是,当我尝试使用它时,它会抱怨“不兼容的类型”,顶行用红色下划线直到冒号。


必需的: Entry <Integer,java.util.List<java.lang.String>>

成立: Entry <Integer,java.util.ArrayList<java.lang.String>>


qq_笑_17
浏览 179回答 3
3回答

隔江千里

在你的情况下,你有List接口和ArrayList实现,你List在地图的声明中正确使用了类型,但是你传递到ArrayList在循环中声明一个 implementationaion(&nbsp;)。问题出现是因为以下语句:Map<Integer,&nbsp;List<String>>&nbsp;data&nbsp;=&nbsp;new&nbsp;HashMap<>();空菱形符号为List<String>.&nbsp;它可以是 ArrayList、LinkedList 等。所以你不能确定编译器会使用ArrayList实现。为了支持代码可扩展性,建议进行所谓的针对接口的编程。只要可以避免将代码耦合到特定的实现,维护最通用的类型总是好的,也就是说,当您需要对其执行一些具体操作时,您将指定实现。

慕后森

因为你已经宣布在价值型Hashmap&nbsp;的List<String>,你给ArrayList<String>的值类型&nbsp;Map.Entry中for loop。更改&nbsp;Map<Integer, List<String>> data = new HashMap<>();为&nbsp;Map<Integer, ArrayList<String>> data = new HashMap<>();

哔哔one

试试下面的代码:for (Map.Entry<Integer, List<String>> entry : data.entrySet()) {&nbsp; &nbsp; &nbsp; &nbsp;Integer key = entry.getKey();&nbsp; &nbsp; &nbsp; &nbsp;List<String> value = entry.getValue();&nbsp; &nbsp; &nbsp; &nbsp;for(String aString : value){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println("key : " + key + " value : " + aString);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
随时随地看视频慕课网APP

相关分类

Java
我要回答