当前位置: 首页 > 面试题库 >

遍历地图条目集

汪正卿
2023-03-14
问题内容

我需要遍历不知道其参数化类型的映射的条目集。

遍历此类入口集时,为什么不编译呢?

public void myMethod(Map anyMap) {
    for(Entry entry : anyMap.entrySet()) {
        ...
    }
}

但这编译:

public void myMethod(Map anyMap) {
    Set<Entry> entries = anyMap.entrySet();
    for(Entry entry : entries) {
        ...
    }
}

并且也可以编译(由于我不知道地图的类型,所以我不能使用它):

public void myMethod(Map<String, String> stringMap) {
    for(Entry<String,String> entry : stringMap.entrySet()) {
        ...
    }
}

问题答案:

您在第一个错误中遇到的错误是:

Type mismatch: cannot convert from element type Object to Map.Entry

这是因为编译器会转换FOR-IN循环:

for (Entry entry : anyMap.entrySet()) {
}

至:

for (Iterator i = anyMap.entrySet().iterator(); i.hasNext();) {
    Entry e = i.next(); // not allowed
}

您的第二个示例有效, 但只能通过作弊! 您正在进行未经检查的演员表转换,以Set 恢复Set<Entry>

Set<Entry> entries = anyMap.entrySet(); // you get a compiler warning here
for (Entry entry : entries) {
}

成为:

Set<Entry> entries = anyMap.entrySet();
for (Iterator<Entry> i = entries.iterator(); i.hasNext(); ) {
    Entry e = (Entry) i.next(); // allowed
}

更新资料

如注释中所述,在两个示例中,类型信息都将丢失:由于编译器的原始类型擦除规则。

为了提供向后兼容性,原始类型实例的 所有 方法都将由其 擦除的
对应对象代替。因此,由于您Map是原始类型,因此将其全部删除。包括其Set<Map.Entry<K, V>> entrySet();方法:您的原始类型实例将被迫使用已删除的版本:Set entrySet()



 类似资料:
  • 问题内容: 您将如何遍历map中的条目,以便可以同时输入条目键和值?例如,我想做这样的事情: 问题答案: 从文档中,我发现此语法有效:

  • 问题内容: 我想遍历JSON文件的内容并将其打印到控制台。 我想我确实把清单混在一起了。 这就是我试图获取所有元素的方法 这是我的JSON(简体:) (可在此处找到完整的JSON输出:Link) 当然,我得到一个错误,我应该在[]中使用整数输入,而不是字符串,但是我不知道该怎么做。 这是: 我怎么了? 问题答案: 实际上,要查询,只需将其添加到最后一行的括号中即可。除此之外,它似乎可以在命令行上的

  • 问题内容: 有没有一种方法可以获取Go语言映射中所有键的列表?元素的数量由给出,但是如果我有类似的地图: 如何遍历所有键? 问题答案: https://play.golang.org/p/JGZ7mN0-U- 要么 语句的Go语言规范指定第一个值是键,第二个变量是值,但不必存在。

  • 问题内容: 我正在尝试显示健身课程清单(瑜伽,普拉提等)。对于每个班级类型,都有几个班级,因此我想将所有瑜伽班和所有普拉提班归为一组,依此类推。 我做了这个功能来切片并绘制它的地图 现在的问题是,根据http://golang.org/pkg/text/template/,我该如何遍历它,您需要以格式访问它,我不知道键(除非我也传递了一个切片模板中的键数)。如何在我的视图中解包此地图。 我目前所拥

  • 无论是调试的需要还是修改节点和边,你可能都需要在现有的有向有环图中进行遍历,下面就介绍图遍历的一些方法。 简单访问 节点和边有很多属性和方法是用来遍历的,边的 from 和 to 属性就是例子,而节点更多: 类型 名称 作用 属性 upstreamNodes 当前节点的所有上游节点 属性 downstreamNodes 当前节点的所有下游节点 属性 upstreamTransforms 当前节点的

  • 问题内容: 如何有效地遍历Java Map中的每个条目? 问题答案: 最佳答案: