java - Set.size() 与迭代器中的元素数量不匹配

标签 java iterator size compiler-errors

为什么 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/

相关文章:

java rmi重新连接客户端问题

java - 如何在一次触摸后停止 OnTouch 方法

java - 将静态方法传递给按钮工厂 (Java)

python - 是文件对象迭代器 "broken?"

heroku - 如何估计redis数据库的大小?

java - 如何在现有系统中实现Hadoop框架

C++ 列表不工作

string - 我如何在 Rust 中加入一个字符向量

c++ - 如何在 C++ 中找到二维数组的大小

size - bool 保证是 1 个字节吗?