亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Java WeakHashMap案例詳解

瀏覽:7日期:2023-12-09 15:12:17

WeakHashMap 繼承于AbstractMap,實現了Map接口。和HashMap一樣,WeakHashMap 也是一個散列表,它存儲的內容也是鍵值對(key-value)映射,而且鍵和值都可以是null。不過WeakHashMap的鍵是“弱鍵”。在 WeakHashMap 中,當某個鍵不再正常使用時,會被從WeakHashMap中被自動移除。更精確地說,對于一個給定的鍵,其映射的存在并不阻止垃圾回收器對該鍵的丟棄,這就使該鍵成為可終止的,被終止,然后被回收。某個鍵被終止時,它對應的鍵值對也就從映射中有效地移除了。這個“弱鍵”的原理呢?大致上就是,通過WeakReference和ReferenceQueue實現的。 WeakHashMap的key是“弱鍵”,即是WeakReference類型的;ReferenceQueue是一個隊列,它會保存被GC回收的“弱鍵”。實現步驟是:(01) 新建WeakHashMap,將“鍵值對”添加到WeakHashMap中。實際上,WeakHashMap是通過數組table保存Entry(鍵值對);每一個Entry實際上是一個單向鏈表,即Entry是鍵值對鏈表。(02) 當某“弱鍵”不再被其它對象引用,并被GC回收時。在GC回收該“弱鍵”時,這個“弱鍵”也同時會被添加到ReferenceQueue(queue)隊列中。(03) 當下一次我們需要操作WeakHashMap時,會先同步table和queue。table中保存了全部的鍵值對,而queue中保存被GC回收的鍵值對;同步它們,就是刪除table中被GC回收的鍵值對。這就是“弱鍵”如何被自動從WeakHashMap中刪除的步驟了。

和HashMap一樣,WeakHashMap是不同步的。可以使用 Collections.synchronizedMap 方法來構造同步的 WeakHashMap

既然有WeakHashMap,那么有WeakHashSet嗎?  java collections包是沒有直接提供WeakHashSet的。

我們可以通過Collections.newSetFromMap(Map<E,Boolean> map)方法可以將任何 Map包裝成一個Set。源碼如下:

public static <E> Set<E> newSetFromMap(Map<E, Boolean> map) {return new SetFromMap<>(map); } /** * @serial include */ private static class SetFromMap<E> extends AbstractSet<E>implements Set<E>, Serializable {private final Map<E, Boolean> m; // The backing mapprivate transient Set<E> s; // Its keySet SetFromMap(Map<E, Boolean> map) { if (!map.isEmpty())throw new IllegalArgumentException('Map is non-empty'); m = map; s = map.keySet();} public void clear() {m.clear(); }public int size() { return m.size(); }public boolean isEmpty() { return m.isEmpty(); }public boolean contains(Object o) { return m.containsKey(o); }public boolean remove(Object o) { return m.remove(o) != null; }public boolean add(E e) { return m.put(e, Boolean.TRUE) == null; }public Iterator<E> iterator() { return s.iterator(); }public Object[] toArray() { return s.toArray(); }public <T> T[] toArray(T[] a) { return s.toArray(a); }public String toString() { return s.toString(); }public int hashCode() { return s.hashCode(); }public boolean equals(Object o) { return o == this || s.equals(o); }public boolean containsAll(Collection<?> c) {return s.containsAll(c);}public boolean removeAll(Collection<?> c) {return s.removeAll(c);}public boolean retainAll(Collection<?> c) {return s.retainAll(c);}

就是對傳入的map進行了簡單的包裝

到此這篇關于Java WeakHashMap案例詳解的文章就介紹到這了,更多相關Java WeakHashMap內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 国产尻逼 | 久久久久国产精品免费免费 | 亚洲国产97在线精品一区 | 免费xxxxx大片观看 | 亚洲综合欧美 | 国产精品久久久久久久午夜片 | 毛片在线播放观看日本 | 中文三级视频 | 视频精品一区二区三区 | 亚洲欧美制服丝袜一区二区三区 | 日本的黄色录像 | 中文在线免费不卡视频 | 亚洲精品国产精品乱码不卞 | 亚洲人成亚洲精品 | 朴妮唛禁福利视频在线 | 美日韩精品 | 亚洲精品网站在线观看不卡无广告 | 国产一区二区三区成人久久片 | 一级黄色片a | 91久久亚洲精品一区二区 | 国产美女网站 | 亚洲精品主播一区二区三区 | 黄在线观看在线播放720p | 日本三级带日本三级带黄国产 | 日韩一级a毛片欧美一级 | 人人草人人澡 | 国产又色又粗又黄又爽免费 | 免费无毒片在线观看 | 国产粗大猛烈18p | 欧美精品国产一区二区三区 | 成人爽a毛片在线视频 | 欧美一区精品二区三区 | 一级特黄特黄毛片欧美的 | 亚洲欧美日韩高清一区二区一 | 国产福利视频微拍在线 | 亚洲人成网站观看在线播放 | 欧美一级专区免费大片俄罗斯 | 97超精品视频在线观看 | 国产91在线播放中文 | 亚洲综合伦理一区 | 国产肥老妇视频69 |