- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
如果没有对其中一个键的 Activity 引用,我如何模拟 WeakHashMap 中条目的删除。我有下一个代码:
WeakHashMap<Integer, String> weakMap = new WeakHashMap<Integer, String>();
Integer st1 = 5;
Integer st2 = 6;
String val = "BB";
weakMap.put(st1, "AA");
weakMap.put(st2, val);
st1 = 10;
//st1 = null;
//System.gc();
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
输出总是
6 BB
5 AA
但我希望只得到 6 BB
即使我取消注释行,它仍然会产生相同的输出。据我了解,如果 WeakHashMap
中的键在此 weakHashMap
之外的其他地方没有 Activity 引用,则必须删除具有指定键的条目。我对吗?如果否,请提出正确的解决方案。
最佳答案
您的 key 永远不会被垃圾回收,因为从 -128 到 127 的 Integer
被缓存(假设使用 Integer.valueOf
,它用于自动装箱的 int
)。您可以使用该范围之外的值或使用 Integer st1 = new Integer(5)
来确保您没有使用缓存的对象。
关于java - WeakHashMap 不会删除过时的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8873216/
在下面的代码中,我创建了一个 Pen 对象并将其颜色初始化为白色。在 Pen 的构造函数中,将字段“penColor”设置为传递给构造函数的值后,我更新了一个全局静态弱 HashMap ,其中 KEY
我正在运行一个游戏,当我启动时,我将图像加载到图像的 WeakHashMap 中。当我运行游戏时,我的 RAM 不断增加,最终我的 WeakHashMap 只是卸载所有数据。这与垃圾收集有关吗?有什么
是否存在所有值都是弱引用的 Map 类?类似于 WeakHashMap,但用于值而不是键。 提前致谢... 最佳答案 您可以使用 MapMaker这是 Guava 的一部分。 "Java DOC:A
我正在阅读有关 WeakHashMap 的 Java 文档我得到了基本概念。由于 GC 线程在后台运行,您可能会出现“异常行为”,例如迭代时出现 ConcurrentModificationExcep
我试图弄清楚 WeakHashMap 在垃圾收集后如何清理。正如你们中许多人可能知道的那样,当 WeakHashMap 条目的键被垃圾回收时,它会自动删除。但是,例如,如果我做这样的事情: List>
我想对将在内存中短时间存在的对象使用 WeakHashMap。 每个对象都有一个 id(唯一的整数字段,它是来自数据库的主键),所以我的第一个想法是使用该字段作为对象的键。 但是,Integer 是不
我正在寻找与 等价的 WeakHashMap 类,除了它把多个键映射到一个值,所以真的更像 WeakHashMap WeakHashMap etc. get 和 set 条目的方式类似于数据库中的多列
这个问题在这里已经有了答案: When would you use a WeakHashMap or a WeakReference? (10 个答案) 关闭 7 年前。 至于 weakhashma
Javadocs 说“当一个键被丢弃时,它的条目被有效地从 map 中移除”。 但除非有另一个线程偶尔会删除这样的 Map.Entry条目,值对象不会被 map 强引用吗?但是因为没有这样的线程在运行
我同时使用了 WeakHashMap。我想基于一个 Integer 参数实现细粒度的锁定;如果线程 A 需要修改由 Integer a 标识的资源,而线程 B 需要修改由 Integer b 标识的资
今天我找到了this blog post其中讨论了 WeakHashMap 在缓存上的用法。有趣的是,不是值,而是键被存储为弱引用,当引用不再存在时,整个键值对将从 WeakHashMap 中删除。因
我想测试 Java WeakHashMap 类的功能,为此我编写了以下测试: public class WeakHashMapTest { public static void main(String
如果没有对其中一个键的 Activity 引用,我如何模拟 WeakHashMap 中条目的删除。我有下一个代码: WeakHashMap weakMap = new WeakHashMap(); I
我正在使用 WeaekHashMap 来实现缓存。我想知道如果我正在遍历这个映射的键,同时垃圾收集器正在主动从这个映射中删除键,我会收到一个 ConcurrentModificationExcepti
是HashSet> Set相当于WeakHashMap ?也就是说,当条目不再被引用时,它们会自动删除吗? 如果不是,等价的是什么? 最佳答案 不,如果集合中的 WeakReference 之一引用的
有一个 WeakHashMap 实例初始化了,例如,500 个条目。现在,它的 key 在运行的应用程序中的任何地方都没有被引用一天左右。这张 map 的条目会在一定时间后自动删除吗? 我的理解是,如
如何自动清除instanceMap的key和value;当 getInstance() API 返回的 Conf 对象是使用 WeakHashMap 和 WeakReference 进行垃圾收集时
首先我想澄清一下我对WeakReference的理解因为以下问题取决于相同。 static void test() { Person p = new Person(); WeakRef
所以我有一个从 ORM/Hibernate 相互引用的对象链 大陆 有很多国家 有很多状态 有很多城市 有很多城市 国家 有一个国家 有很多状态 有很多城市 有很多城市 状态 拥有一个大陆 有一个国家
我有一个这样的代码。 private static Map PATTERNS; private static Map patterns() { if (PATTERNS == null) {
我是一名优秀的程序员,十分优秀!