为什么 Set.size() 与集合迭代器中的元素数量不匹配?
我正在使用 HashSet,并添加了一些重复值。因为我使用了一套,所以那些重复项被自动删除了。 Set.size() 返回 16。当我实际遍历元素时,我得到 13。
造成这种差异的原因是什么?我做得对吗?
Set set = new HashSet();
...
System.out.println ("Found " + set.size() + " tokens...");
Iterator it = set.iterator();
int i = 0;
while (it.hasNext()) {
i++;
System.out.println(Integer.toString(i) + ": " + (String)it.next());
}
这是控制台的输出:
Found 16 tokens...
1: 3 Months Free HD Extra Pack
2: Best Buy - $30 for 3 Months (Instant Rebate)
3: Gift Card - Fry's - $100 (HDTV Offer)
4: 6 Months FREE Showtime
5: 3 Months Free HD Access
6: Savings Certificate Booklet
7: 3 months FREE Showtime (rolls off month 4)
8: Free NASCAR Hotpass
9: 3 Months Free DVR Service
10: $0 Delivery & Handling
11: 1 Year Free Showtime
12: $99 Off Advance Equipment (2nd AP)
13: Best Buy - $30 for 12 Months (Instant Rebate)
最佳答案
说真的,这是不可能的。 HashSet 是一个足够成熟的类,不可能像您描述的那样出现错误。以下是您可以实现这一目标的一些方法:
- 像 Mark Peters 建议的那样使用 Reflection 摆弄布景;
- 您已导致在终止程序的第 13 个元素之后抛出异常
- 覆盖 Set 的行为以使其不一致
- 您正在使用不同的集合来打印总计和项目
关于java - Set.size() 与迭代器中的元素数量不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3337398/