Tag: weakhashmap

当有人使用MapMaker或WeakHashMaps时,有人可以向我解释一下吗?

我读过许多人非常喜欢Google Guava(collections集)的MapMaker ,但是我看不出它有什么用处。 我已经阅读了javadoc,它说它的行为类似于ConcurrentHashMap 。 它还说new MapMaker().weakKeys().makeMap()几乎总是可以用作WeakHashMap的替代品。 但是,读取ConcurrentHashMap和WeakHashMap的javadoc会让我想知道何时使用它是有用的? 在我看来,你无法保证你在地图中放置的任何东西都会存在,或者我误解了?

Java弱哈希映射 – 需要根据值的弱点而不是键来删除条目

因此,Java WeakHashMap允许创建一个映射,如果其键变弱,则删除其条目。 但是,当地图中的值变弱时,如何创建一个其条目被删除的Map? 我想使用地图的原因是全局哈希表,它根据ID来跟踪对象。 ID —> Object Address Key —> Value (其中ID是文本字符串) 我希望在对象地址变弱时删除键值对,而不是指向它们的字符串。 有人对此有何看法?

WeakHashMap和强引用值

Javadocs说:“当一个密钥被丢弃时,它的条目将被有效地从地图中删除”。 但除非有另一个线程偶尔删除这样的Map.Entry条目,否则地图不会强烈引用值对象? 但是由于没有运行这样的线程,只有get方法调用可以删除这些条目 – 一次一个。 因为这个原因WeakHashMap<K, WeakReference>我几乎总是使用WeakHashMap<K, WeakReference> 。 为什么他们没有将默认行为 – 值作为弱引用呢?

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 wm = new WeakHashMap(); 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()); } […]