WeakHashMap类是Map接口的一个实现,它只存储对键的弱引用。仅存储弱引用允许在键不再在WeakHashMap之外引用时对键值对进行垃圾收集。

此类提供了利用弱引用功能的最简单方法。它对于实现“类似注册表”的数据结构很有用,其中当任何线程不再可以访问键时,项目的实用程序就会消失。

WeakHashMap的功能与HashMap相同,但有一个非常重要的特性:如果Java内存管理器不再具有对指定为键的对象的强引用,则将删除映射中的条目。

弱引用 - 如果对象的唯一引用是弱引用,则垃圾回收器可以随时回收对象的内存。它不必等到系统内存不足。通常,它将在下次垃圾收集器运行时释放。

以下是WeakHashMap类支持的构造函数列表。

编号

构造函数

描述

1

WeakHashMap()

此构造函数使用默认初始容量(16)和默认加载因子(0.75)构造一个新的空WeakHashMap。

2

WeakHashMap(int initialCapacity)

此构造函数使用给定的初始容量和默认加载因子(0.75)构造一个新的空WeakHashMap。

3

WeakHashMap(int initialCapacity, float loadFactor)

4

WeakHashMap(Map t)

此构造函数构造一个新的WeakHashMap,其映射与指定的Map相同。

除了从父类继承的方法之外,WeakHashMap还定义了以下方法 -

编号

方法

描述

1

void clear()

从此映射中删除所有映射。

2

boolean containsKey(Object key)

如果此映射包含指定键的映射,则返回true。

3

boolean containsValue(Object value)

如果此映射将一个或多个键映射到指定值,则返回true。

4

Set entrySet()

返回此映射中包含的映射的集合视图。

5

Object get(Object key)

返回指定键在此标识哈希映射中映射到的值,如果映射不包含此键的映射,则返回null。

6

boolean isEmpty()

如果此映射不包含键-值映射,则返回true。

7

Set keySet()

返回此映射中包含的键的set视图。

8

Object put(Object key, Object value)

将指定的值与此映射中的指定键相关联。

9

void putAll(Map m)

将指定映射中的所有映射复制到此映射。这些映射将替换此映射对当前位于指定映射中键的映射。

10

Object remove(Object key)

从此映射中删除此键的映射(如果存在)。

11

int size()

返回此映射中键-值映射的数量。

12

Collection values()

返回此映射中包含值的集合视图。

示例

以下程序演示了如何使用此集合支持的几种方法 -

import java.util.*;

/* 文件 : WeakHashMapDemo.java */

public class WeakHashMapDemo {

private static Map map;

public static void main(String args[]) {

map = new WeakHashMap();

map.put(new String("Yiibai.com"), "Kaops.com");

Runnable runner = new Runnable() {

public void run() {

while (map.containsKey("Yiibai.com")) {

try {

Thread.sleep(500);

} catch (InterruptedException ignored) {

}

System.out.println("Thread waiting");

System.gc();

}

}

};

Thread t = new Thread(runner);

t.start();

System.out.println("Main waiting");

try {

t.join();

} catch (InterruptedException ignored) {

}

}

}

执行上面示例代码,得到以下结果 -

Main waiting

Thread waiting

如果不包含对System.gc()的调用,系统可能永远不会运行垃圾收集器,因为程序使用的内存不多。对于更活跃的程序,调用是不必要的。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

java weakhashmap_Java WeakHashMap类相关推荐

  1. weakhashmap_Java WeakHashMap values()方法与示例

    weakhashmap WeakHashMap类values()方法 (WeakHashMap Class values() method) values() method is available ...

  2. weakhashmap_Java WeakHashMap putAll()方法与示例

    weakhashmap WeakHashMap类的putAll()方法 (WeakHashMap Class putAll() method) putAll() method is available ...

  3. weakhashmap_Java WeakHashMap entrySet()方法与示例

    weakhashmap WeakHashMap类entrySet()方法 (WeakHashMap Class entrySet() method) entrySet() method is avai ...

  4. weakhashmap_Java WeakHashMap get()方法与示例

    weakhashmap WeakHashMap类的get()方法 (WeakHashMap Class get() method) get() method is available in java. ...

  5. weakhashmap_Java WeakHashMap size()方法与示例

    weakhashmap WeakHashMap类的size()方法 (WeakHashMap Class size() method) size() method is available in ja ...

  6. weakhashmap_Java WeakHashMap keySet()方法与示例

    weakhashmap WeakHashMap类的keySet()方法 (WeakHashMap Class keySet() method) keySet() method is available ...

  7. Hutool Java常用工具类汇总

    简介 Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以"甜甜的". Hu ...

  8. Java中WeakHashMap的应用场景

    WeakHashMap是啥: WeakHashMap和HashMap都是通过"拉链法"实现的散列表.它们的源码绝大部分内容都一样,这里就只是对它们不同的部分就是说明. WeakRe ...

  9. java string改变的影响_为什么Java的string类要设成immutable(不可变的)

    最流行的Java面试题之一就是:什么是不可变对象(immutable object),不可变对象有什么好处,在什么情况下应该用,或者更具体一些,Java的String类为什么要设成immutable类 ...

最新文章

  1. HarmonyOS 查看本地API
  2. 面试问了这两个问题,很多人的回答都自相矛盾
  3. MeterialDesign系列文章(一)ToolBar的使用
  4. php弱类型变量是什么,php弱类型变量如何实现?
  5. 11 | 脑裂: 一次奇怪的数据丢失
  6. 企业私有云部署im,视频服务
  7. python背景图片加载代码_2019.12.05-背景图片设置代码
  8. (30)System Verilog设计SPI发送
  9. 一组飒气十足的商务海报PSD分层海报
  10. SSH三大框架的概述
  11. IT近年最新技术一览
  12. 人月神话札记:画蛇添足
  13. 2022年最新区块链电商赋能企业的解决方案
  14. 强劲的网络。http://www.chartboost.com/
  15. jxl 单元格画斜线
  16. PS快速处理证件照(给证件照拉直)
  17. PLC运动控制系列之机械回原点(back to origin)
  18. python学习笔记第六章文本词频统计
  19. 易语言超级算法转php,易语言 PHP RC4算法同步应用源码
  20. 大锅菜机器人_天津农学院现“炒菜机器人” 做番茄炒蛋堪比大师傅

热门文章

  1. android获取子线程id,从onReceive android获取消息线程id或_id
  2. Python中无法导入上一级目录下的包
  3. 公司上市有什么好处?公司上市利弊分析
  4. 散点图绘制+纵向条形图+横向条形图+多组条形图绘制+直方图(原始数据和非原始数据的处理)
  5. 智慧物业—建设智慧社区的实践
  6. mac home权限解锁
  7. bzoj 4418: [Shoi2013]扇形面积并
  8. 带有显示的8路抢答器课程设计
  9. Spring.NET - QnA
  10. word分散对齐调整宽度_活用word分散对齐