小编Vik*_*nko的帖子

为什么 HashSet 在 Java 8 和 Java 9+ 中表现不同?

尝试删除迭代器中包装的对象时,Java 8 和 Java 9+ 的行为不同。考虑以下示例:

import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

class Scratch {
  public static void main(String[] args) {
    Set<Date> dates = new HashSet<>();
    dates.add(new Date(100));
    dates.add(new Date(200));

    for (Date date : dates) {
        System.out.println("Initial "+date.getTime()+":"+date.hashCode());
        date.setTime(date.getTime()+42);
        System.out.println("Mutated "+date.getTime()+":"+date.hashCode()+"\n");
    }

    System.out.println("Size before remove iteration: "+dates.size());
    Iterator<Date> iterator = dates.iterator();
    while (iterator.hasNext()) {
        Date date = iterator.next();
        System.out.println("In loop: "+date.getTime()+":"+date.hashCode());
        iterator.remove();
    }
    System.out.println("Size after remove iteration: "+dates.size());
  }
}
Run Code Online (Sandbox Code Playgroud)

在 HashSet 中改变对象后,Java 8 拒绝使用迭代器删除它们,检查删除循环后的大小。Java 8 输出:

Initial …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-9

5
推荐指数
1
解决办法
133
查看次数

标签 统计

java ×1

java-8 ×1

java-9 ×1