gpt4 book ai didi

java集合 - map 中的keyset()与entrySet()

转载 作者:IT老高 更新时间:2023-10-28 21:00:35 26 4
gpt4 key购买 nike

我把一个字符串数组元素是一个映射,其中字符串数组的元素是键,单词的频率是值,例如:

String[] args = {"if","it","is","to","be","it","is","up","me","to","delegate"};

那么 map 将有类似 [ if:1, it:2 .... ]

的条目
Set<String> keys = m.keySet();
System.out.println("keyset of the map : "+keys);

打印所有键:"if","it","is","to","be","it","is","up","me","to", “委托(delegate)”

Set<Map.Entry<String, Integer>> entrySet = m.entrySet();
Iterator<Map.Entry<String, Integer>> i = entrySet.iterator();
while(i.hasNext()){
Map.Entry<String, Integer> element = i.next();
System.out.println("Key: "+element.getKey()+" ,value: "+element.getValue());
}

打印所有键值对:

使用条目集打印所有值:

Key: if ,value: 1
Key: it ,value: 2
Key: is ,value: 2
Key: to ,value: 2
Key: be ,value: 1
Key: up ,value: 1
Key: me ,value: 1
Key: delegate ,value: 1

但下面的代码块应该打印与上面完全相同的输出,但它没有:

Iterator<String> itr2 = keys.iterator();
while(itr2.hasNext()){
//System.out.println(itr1.next()+" ");
//System.out.println(m.get(itr1.next())+" ");
System.out.println("Key: "+itr2.next()+" ,value: "+m.get(itr2.next()));
}

打印出来:

Key: if ,value: 2
Key: is ,value: 2
Key: be ,value: 1
Key: me ,value: 1

但是如果我们在 while 循环中取消注释第 1 行,即

System.out.println(itr1.next()+" ");

并注释该行

System.out.println("Key: "+itr2.next()+" ,value: "+m.get(itr2.next()));

然后我们得到所有的键:{"if","it","is","to","be","it","is","up","me","到","委托(delegate)"};

如果我们将 m.get()itr2.next() 一起使用,那么迭代器没有几个键!

最佳答案

每次调用 Iterator.next() 都会将迭代器移动到下一个元素。如果要在多个语句或表达式中使用当前元素,则必须将其存储在局部变量中。或者更好的是,您为什么不简单地使用 for-each 循环?

for (String key : map.keySet()) {
System.out.println(key + ":" + map.get(key));
}

此外,遍历 entrySet 更快,因为您不会为每个键查询两次映射。此外,Map.Entry 实现通常实现 toString() 方法,因此您不必手动打印键值对。

for (Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry);
}

关于java集合 - map 中的keyset()与entrySet(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8962459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com