我正在看一个 java 刽子手游戏:https://github.com/leleah/EvilHangman/blob/master/EvilHangman.java https://github.com/leleah/EvilHangman/blob/master/EvilHangman.java
具体的代码是这样的:
Iterator<Entry<List<Integer>, Set<String>>> k = partitions.entrySet().iterator();
while (k.hasNext())
{
Entry<?, ?> pair = (Entry<?, ?>)k.next();
int sizeOfSet = ((Set<String>)pair.getValue()).size();
if (sizeOfSet > biggestPartitionSize)
{
biggestPartitionSize = sizeOfSet;
}
}
现在我的问题。我猜我的 google foo 很弱,除了 java 文档本身之外,我在条目集上找不到太多东西。这只是地图的临时副本吗?我根本找不到有关语法的任何信息:
Entry<?, ?>
任何人都可以解释或指出我对这些问号发生的情况的解释吗?提前致谢!
An entrySet
是 Map 中所有条目的集合 - 即 Map 中所有键、值对的集合。因为 Map 由键、值对组成,所以如果要迭代它,您需要指定是要迭代键、值还是两者(条目)。
The <?,?>
表明pair
变量保存一个条目,其中键和值可以是任何类型。这通常表明我们不关心它保存什么类型的值。在您的代码中,情况并非如此,因为您需要将值转换为Set<String>
这样你就可以检查它的大小。
您还可以按如下方式重写代码,避免强制转换为Set<String>
Iterator<Entry<List<Integer>, Set<String>>> k = partitions.entrySet().iterator();
while (k.hasNext())
{
Entry<?, Set<String>> pair = (Entry<?, Set<String>>)k.next();
int sizeOfSet = pair.getValue().size();
if (sizeOfSet > biggestPartitionSize)
{
biggestPartitionSize = sizeOfSet;
}
当我们需要更具体地了解 Entry 所持有的类型时,我们可以使用完整类型:Entry<List<Integer>, Set<String>>
。这避免了将键或值转换为特定类型的需要(以及转换为错误类型的风险)。
您还可以仅指定键或值的类型,如上面的示例所示。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)