编写一个方法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
循环遍历列表?如果不是,为什么?