gpt4 book ai didi

java - For each 循环有效,但迭代器无效

转载 作者:行者123 更新时间:2023-11-30 06:26:10 25 4
gpt4 key购买 nike

编写一个counts方法,它接受一个List整数和一个Set整数作为参数,并从中的每个值返回一个映射设置为该值在列表中出现的次数。

我的解决方案 #1:

public static Map<Integer, Integer> counts(List<Integer> list, Set<Integer> set) {
Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
Iterator<Integer> i = list.iterator();

for(Integer element : set) {
int count = 0;
for(Integer sub : list) {
if(sub == element) {
count++;
}
}
map.put(element, count);
}

return map;
}

我的解决方案#2:

public static Map<Integer, Integer> counts(List<Integer> list, Set<Integer> set) {
Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
Iterator<Integer> i = list.iterator();

for(Integer element : set) {
int count = 0;
while(i.hasNext()) {
if(i.next() == element) {
count++;
}
}
map.put(element, count);
}

return map;
}

输入:

list: [4, -2, 3, 9, 4, 17, 5, 29, 14, 87, 4, -2, 100]
set: [-2, 4, 29]

预期输出:

{-2=2, 4=3, 29=1}

#1 的输出:

{-2=2, 4=3, 29=1}

#2 的输出:

{-2=0, 4=3, 29=0}

第一个有效,但第二个无效。为什么?它们本质上是同一回事,还是我遗漏了什么?另外,是否可以使用 for 循环来遍历列表?如果不是,为什么?

最佳答案

您忘记在每次循环后重置迭代器,请尝试以下操作:

for(Integer element : set) {
int count = 0;
i = list.iterator(); // resets the iterator to the first element.
while(i.hasNext()) {
if(i.next() == element) {
count++;
}
} // by the end of this loop the iterator has no next elements, need to reset.
map.put(element, count);
}

关于java - For each 循环有效,但迭代器无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14720027/

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