【发布时间】:2019-08-19 17:05:14
【问题描述】:
我正在尝试使用 Java7 的 WeakHashMap,但发现它的 isEmpty() 方法给了我错误的结果。
import java.util.Map;
import java.util.WeakHashMap;
public class Test
{
public static void main(final String[] args)
{
final Map<String, Boolean> map = new WeakHashMap<>();
String b = new String("B");
map.put(b, true);
b = null;
System.gc();
System.out.println(map.isEmpty());
System.out.println(map.keySet().isEmpty());
System.out.println(map);
}
}
实际结果:
假
是的
{}
也就是说,
map.isEmpty() 和 map.keySet().isEmpty() 不一致。 有人可以帮我理解吗?非常感谢。
【问题讨论】:
-
来自该类的 Java 8 API 文档:“因为垃圾收集器可能随时丢弃键,所以 WeakHashMap 的行为可能就像未知线程正在默默地删除条目一样。”和“..size 方法可能会随着时间的推移返回更小的值,isEmpty 方法可能会返回 false 然后返回 true..”,所以我认为没有理由担心。
-
检查this
标签: java weakhashmap