标签: weakhashmap

什么是WeakHashMap以及何时使用它?

什么是什么WeakHashMap时候应该使用它?a WeakHashMap和a 之间有什么区别HashMap

java collections weakhashmap

144
推荐指数
5
解决办法
9万
查看次数

WeakHashMap是否有java.util.concurrent等价物?

是否可以使用Collections.synchronizedMap()并发保持正确性来重写下面的代码片段?

Collections.synchronizedMap(new WeakHashMap<Class, Object>());
Run Code Online (Sandbox Code Playgroud)

即是否可以使用java.util.concurrent中的东西?请注意,仅替换为

new ConcurrentHashMap<Class, Object>(new WeakHashMap<Class, Object>()));
Run Code Online (Sandbox Code Playgroud)

显然不行

java collections java.util.concurrent weakhashmap guava

46
推荐指数
2
解决办法
2万
查看次数

WeakHashMap示例

我创建一个WeakHashMap作为

WeakHashMap<Employee,String> map = new WeakHashMap<Employee,String>();
map.put(emp,"hello");
Run Code Online (Sandbox Code Playgroud)

其中emp是Employee对象.现在,如果我执行emp = null或者说不再引用emp对象,那么是否将从WeakHashMap中删除该条目,即Map的大小是否为零?
在HashMap的情况下反之亦然?
我对WeakHashMap的理解是否正确?

java weakhashmap

21
推荐指数
3
解决办法
2万
查看次数

设置WeakHashMap的等价物?

HashSet<WeakReference<T>>Set等效WeakHashMap<T>?也就是说,当条目不再被引用时会自动删除吗?

如果没有,那相当于什么?

java collections weak-references hashset weakhashmap

17
推荐指数
1
解决办法
3576
查看次数

弱哈希映射如何知道垃圾收集对象?

我最近发现了WeakHashMapJava中的数据结构.

但是,我不明白它的意思是垃圾收集不再正常使用时的映射.数据结构如何知道我将不再使用我的程序中的密钥?如果我长时间没有提到钥匙怎么办?

java garbage-collection weakhashmap data-structures

13
推荐指数
1
解决办法
6206
查看次数

WeakHashMap vs HashMap

在以下代码示例中,将键设置为null和 System.gc()调用时,将WeakHashMap丢失所有映射并清空.

class WeakHashMapExample {

public static void main(String[] args) {

    Key k1 = new Key("Hello");
    Key k2 = new Key("World");
    Key k3 = new Key("Java");
    Key k4 = new Key("Programming");

    Map<Key, String> wm = new WeakHashMap<Key, String>();


    wm.put(k1, "Hello");
    wm.put(k2, "World");
    wm.put(k3, "Java");
    wm.put(k4, "Programming");
    k1=null;
    k2=null;
    k3=null;
    k4=null;
    System.gc();
    System.out.println("Weak Hash Map :"+wm.toString());

}

}

class Key{

private String key;

public Key(String key) {
    this.key=key;
}

@Override
public boolean equals(Object obj) {
    return this.key.equals((String)obj);
} …
Run Code Online (Sandbox Code Playgroud)

java weakhashmap

11
推荐指数
1
解决办法
9462
查看次数

WeakHashMap的keySet条目永远不会为空吗?

如果我遍历WeakHashMap的密钥集,我是否需要检查空值?

WeakHashMap<MyObject, WeakReference<MyObject>> hm
    = new WeakHashMap<MyObject, WeakReference<MyObject>>();

for ( MyObject item : hm.keySet() ) {
    if ( item != null ) { // <- Is this test necessary?
        // Do something...
    } 
}
Run Code Online (Sandbox Code Playgroud)

换句话说,当我迭代它们时,是否可以收集WeakHashMap的元素?

编辑

为了这个问题,可以假设null在哈希映射中没有添加任何条目.

java iteration null weakhashmap keyset

9
推荐指数
2
解决办法
2252
查看次数

如果值包含对密钥的唯一强引用,是否会收集WeakHashMap的条目?

我需要将一些数据与密钥关联起来,因此我使用的是WeakHashMap.但是,另外我需要通过其相应的值获取密钥.简单的方法是在创建值时保持引用:

public class Key {}

public class Value { 
    final public Key key;
    public Value(Key k) {
        key = k;
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,当我Value在我的程序中使用时,它key不会消失.但是,如果在地图外没有对任何一个键或其值的引用,它是否会被垃圾收集?或者价值中幸存的强大参考是否会阻止它?

java weak-references weakhashmap

8
推荐指数
1
解决办法
750
查看次数

Java:使用弱引用进行堆栈

在Java中,有一个名为WeakHashMap的数据结构,它将弱引用存储为键.每当弱引用从内存中取出时,该条目将从地图中删除.

如果我有一个数据结构,如Stack或Set,我存储弱引用,当弱引用从内存中取出时,它们的条目会被自动删除吗?

下面是存储弱引用的Stack的示例.

Stack<WeakReference<Object>> objStack = new Stack<WeakReference<Object>>();
Run Code Online (Sandbox Code Playgroud)

java stack weak-references set weakhashmap

8
推荐指数
1
解决办法
1242
查看次数

如何在Java中有效地使用String作为WeakHashMap键,或者替代解决方案

我正在用Java管理一个存储用户数据的项目.用户可以在线或离线.当用户在线时,他们的数据被加载到数据对象中以便于访问,并在他们注销时卸载.

但是,对于离线用户,为了防止数据同时访问来自同时操作数据的多个命令的数据,我将weakhashmap存储为加载的用户数据对象的缓存.如果需要访问脱机数据对象以进行修改,系统将在从文件加载之前先检查缓存.

我能想到如何存储它们的唯一方法是使用字符串键,它代表用户的用户名.但是由于java的工作原理,由于VM的字符串缓存系统,这似乎并不总是有效.

最初我想过使用字符串包装器,但是再次因为hashmaps如何工作(通过使用hashcode),创建一个新的字符串包装器不会得到我需要的值,如果我存储了字符串包装器,那将失败目的通过始终存储对密钥的强引用(防止从weakhashmap中删除密钥).

也许我只是不理解如何使用weakhashmap:S如果不是如何使用weakhashmap,我愿意接受其他如何做我想做的想法.

java caching data-storage weakhashmap data-loss

8
推荐指数
1
解决办法
2176
查看次数