【发布时间】:2017-04-18 15:14:05
【问题描述】:
我正在尝试遍历 HashSet 的 Integer 对象,并且我想计算元素出现的次数。这是我目前的方法
public int freq(int element) {
int numElements = 0;
for (int atPos : mySet){
if (mySet.atPos == element){ //says atPos cannot be resolved to a field
numElements++;
}
}
return numElements;
}
使用迭代器迭代元素会更好吗?如何修复我的
mySet.atPos
行?
这是我初始化HashSet的地方
private HashSet <Integer> mySet = new HashSet<Integer>();
【问题讨论】:
-
嗯,您的
atPos是您收集的集合中的整数。假设您的集合包含3, 2, 111,那么您有三个循环,其中atPos是3、2,最后是111。所以就做if (atPos == element) -
您的问题是对如何使用变量的简单误解。
int atPos和mySet.atPos不是指同一个东西。前者指的是一个局部变量,后者是寻找一个集合称为同一个东西的实例的字段的公共成员。 -
但是...您是否意识到您将始终得到 0 或 1 作为您的
freq(...)函数的结果?这就是集合的工作原理...... -
@KarelG 为什么我总是得到 0 或 1?对不起,如果这是一个愚蠢的问题。
-
@emmynaki 集从不包含重复项。列表可以,但集合会自动删除重复项。