use*_*425 2 java foreach iterator for-loop
编写一个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;
}
Run Code Online (Sandbox Code Playgroud)
我的解决方案#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;
}
Run Code Online (Sandbox Code Playgroud)
输入:
list: [4, -2, 3, 9, 4, 17, 5, 29, 14, 87, 4, -2, 100]
set: [-2, 4, 29]
Run Code Online (Sandbox Code Playgroud)
预期产量:
{-2=2, 4=3, 29=1}
Run Code Online (Sandbox Code Playgroud)
#1的输出:
{-2=2, 4=3, 29=1}
Run Code Online (Sandbox Code Playgroud)
#2的输出:
{-2=0, 4=3, 29=0}
Run Code Online (Sandbox Code Playgroud)
第一个起作用,但第二个起作用.为什么?他们基本上是一回事,或者我错过了什么?还会使用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);
}
Run Code Online (Sandbox Code Playgroud)