Java中的WeakHashMap

Java中的WeakHashMap是中高级Java开发人员中非常流行的数据结构。

WeakHashMap类位于java.util包中。 这是一个Map实现,其中存储了对其键的弱引用。 当关联密钥丢失其所有活动的强引用和软引用时, WeakHashMap中的条目将自动删除。

在本文中,我们将首先讨论Java中的引用类型-软引用,弱引用和强引用。 然后,我们将了解WeakHashMap

Java引用的类型:

Java允许具有三种不同类型的引用:

1.强引用:

在日常Java编程中使用的是强引用:

Employee emp = new Employee("Jake");

强引用所引用的任何对象均不符合垃圾回收的条件。

2.软参考:

在JVM绝对需要内存之前,不会对软引用指向的对象进行垃圾回收。 我们可以创建一个java.lang.ref。 SoftReference,例如

SoftReference<Employee> empSoft = new SoftReference<>(new Employee("Jake"));

3.参考文献少:

我们可以使用java.lang.ref.WeakReference类创建WeakReference。 任何丢失所有强引用和软引用的对象都将立即有资格进行垃圾回收 ,即使我们有一些指向它的弱引用也是如此:

Employee jake = new Employee("Jake");
Employee jakeOtherStrongRef = jake;WeakReference<Employee> emp = new WeakReference<>(jake);jake = null; // object not yet eligible for GC as jakeOtherStrongRef also exists
jakeOtherStrongRef = null; //object is now eligible for GC

Java WeakHashMap是一个哈希实现,它的键包含WeakReference 。 就像HashMap一样 ,它也支持null键和null值。 我们可以使用可用的构造函数之一创建WeakHashMap:

  • WeakHashMap():创建一个空的WeakHashMap ,其默认容量为(16),默认负载因子为(0.75)
  • WeakHashMap(int initialCapacity):创建具有给定容量和默认加载因子的空WeakHashMap
  • WeakHashMap(int initialCapacity,float loadFactor):使用给定的初始容量和负载因子来实例化WeakHashMap
  • WeakHashMap(Map <?扩展K ,?扩展V> map):构造一个新的WeakHashMap ,其映射与指定的Map相同。

让我们使用默认构造函数快速实例化WeakHashMap

WeakHashMap<Integer, String> map = new WeakHashMap<>();

WeakHashMap实现Map接口,因此继承了其所有方法。 让我们看一下最常用的方法:

  • V put(K key,V value):WeakHashMap中插入一个新的键值对。 如果映射已经包含给定键,则其值将被替换
  • V get(Object key):获取给定键的值。 如果映射不包含键的映射,则返回null
  • V remove(Object key):删除具有给定键的条目并返回关联的值
  • boolean containsKey(Object key):如果地图包含给定键,则返回true ,否则返回false
  • boolean containsValue(Object value):检查地图是否包含给定值
  • int size():获取WeakHashMap的大小
  • boolean isEmpty():返回地图是否为空
  • Set <Map.Entry <K,V >> entrySet():返回地图中包含的映射的Set视图
  • Set <K> keySet():返回地图中包含的键的Set视图
  • Collection <V> values():返回包含在映射中的值的Collection视图

让我们尝试以下几种方法:

map.put(1, "Argon");
map.put(2, "Nitrogen");System.out.println(map.containsKey(1)); //true
System.out.println(map.containsKey(3)); //false
System.out.println(map.containsValue("Nitrogen")); //trueString val = map.get(2); // "Nitrogen" 
int size = map.size(); //2for(Map.Entry<Integer, String> entry : map.entrySet()) {System.out.println(entry.getKey() + ":" + entry.getValue());
}

我们之前讨论过, WeakHashMapHashMap不同,它存储键的弱引用。

现在,让我们借助一个示例来理解这个概念。

假设我们有一个Employee类:

class Employee {private int id;private String name;//constructors, getters and setterspublic String toString() {return "[Employee{id=" + id + " ,name=" + name + "}]";}
}

并说我们定义了一个WeakHashMap <Employee,Integer> ,它存储每个Employee的依赖项数量:

Map<Employee, Integer> weakHashMap = new WeakHashMap<>();Employee ray = new Employee(1, "Ray");
Employee sierra = new Employee(2, "Sierra");weakHashMap.put(ray, 3);
weakHashMap.put(sierra, 4);System.out.println(weakHashMap); //{[Employee{id=1 ,name=Ray}]=3, [Employee{id=2 ,name=Sierra}]=4} sierra = null;System.gc();System.out.println(weakHashMap); //{[Employee{id=1 ,name=Ray}]=3}

显然,我们可以看到现在WeakHashMap不再包含sierra的条目 换句话说,当我们将sierra指向的对象设置为null并有资格进行垃圾回收时,它失去了唯一的强引用。 在使用System.gc()请求垃圾收集时,垃圾收集器从WeakHashMap中删除了该条目。

让我们讨论一下HashMapWeakHashMap之间的重要区别:

哈希图 WeakHashMap
存储的条目对象不符合垃圾回收条件 当WeakHashMap中的条目丢失所有强引用和软引用时,该条目将被自动删除
HashMap对其关键对象拥有强大的引用 如果使用WeakHashMap,则会存储对键的弱引用
除非我们显式添加或删除条目,否则size()方法将始终返回相同的值 size()方法可能返回较小的值,因为GC可能会自动删除一些条目
HashMap实现了Cloneable接口,其clone()方法返回HashMap的浅表副本 不实现Cloneable
实现可序列化的接口 不支持序列化

结论:

在本教程中,我们学习了Java中的WeakHashMapWeakHashMap存储对其键对象的弱引用,因此一旦键丢失所有常规引用,条目可能会自动删除。

成为第一个发表评论的人。

翻译自: https://www.javacodegeeks.com/2019/05/weakhashmap-java.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/342744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于交换机的VLAN技术你了解多少?

VLAN&#xff08;虚拟局域网&#xff09;是对连接到的第二层交换机端口的网络用户的逻辑分段&#xff0c;不受网络用户的物理位置限制而根据用户需求进行网络分段。一个VLAN可以在一个交换机或者跨交换机实现。VLAN可以根据网络用户的位置、作用、部门或者根据网络用户所使用的…

【渝粤教育】国家开放大学2018年春季 3781-22T燃气燃烧技术与设备 参考试题

科目编号&#xff1a;3781 座位号 2017-2018学年度第二学期期末考试 燃气燃烧技术与设备 试题 2018年 7 月 一、填空题&#xff08;本大题共6空&#xff0c;每空5分&#xff0c;共计30分&#xff09; 1&#xff0e;完全预混燃烧条件&#xff1a;一是 &#xff1b;二是 。 2&a…

什么是电源正激和反激? 正激和反激有什么区别特点?如何快速区分

正激和反激是两种不同的开关电源技术 正激式开关电源 01 简介 正激式开关电源是指使用正激高频变压器隔离耦合能量的开关电源&#xff0c;正激式开关电源中结构比较复杂&#xff0c;输出功率高&#xff0c;适用于低压&#xff0c;大电流&#xff08;100W&#xff0d;300W&…

Time-of-Flight技术在距离测量和定位上的应用

LoRa技术是Semtech公司采用并且推广的的一种基于扩频技术的超远距离无线传输方案&#xff0c;属于低功耗广域网&#xff08;Low Power Wide Area Network&#xff0c;LPWAN&#xff09;通信技术中的一种。LoRa技术不再受限于传输距离和功耗的折衷考虑&#xff0c;为用户们提供了…

【渝粤教育】国家开放大学2018年春季 7397-21T家庭教育咨询与辅导 参考试题

编号&#xff1a;7397 座位号 2017-2018学年度第二学期期末考试 家庭教育咨询与辅导 试题&#xff08;开卷&#xff09; 2018年7月 一、填空题&#xff08;每空1分&#xff0c;共16分。错别字不给分。&#xff09; 传统的家庭模式分为三类&#xff0c;分别是&#xff1a;核心…

交换机的RJ45端口和SFP端口有什么区别?

现如今&#xff0c;随着人们对网络需求的日益增长&#xff0c;数据中心或者服务器机房内的网络升级已经刻不容缓&#xff0c;因此&#xff0c;千兆以太网已经越来越普遍。众所周知&#xff0c;目前市场上大家使用的千兆以太网交换机一般有两种端口&#xff1a;RJ45端口和SFP端口…

LoRa、蓝牙、技术在电子显示牌上的应用

概述 随着电子显示牌技术的不断发展&#xff0c;控制方式越来越多样化&#xff0c;价格越来越低廉&#xff0c;使得其应用领域越来越广泛&#xff08;如&#xff1a;高速公路的指示牌&#xff0c;车站的指示牌&#xff0c;运动场上的比分牌&#xff0c;街头的广告牌等等&#x…

【渝粤教育】国家开放大学2018年春季 8623-22T燃气行业法律法规 参考试题

科目编号&#xff1a;8623 座位号 2018-2019学年度第二学期期末考试 燃气行业法律法规 试题 2018年 7 月 一、填空题&#xff08;本大题共6空&#xff0c;每空5分&#xff0c;共计30分&#xff09; 1&#xff0e;县级以上地方人民政府应当建立健全 制度&#xff0c;组织编制燃…

java ee 7 新_Java EE 7:新功能???

java ee 7 新我有点“晚点”&#xff0c;可以这么说……就Java EE 7的 “博客”而言。 自2013年6月发布以来&#xff0c;已经差不多10个月了 &#xff0c;但是它仍然相对较新。 就我个人而言&#xff0c;仅仅是因为它的易用性和所购买的功能范围之广&#xff0c;我对此感到很兴…

【应用案例】蓝牙BLE实现防丢器的方法

概述 随着科学技术的发展&#xff0c;越来越多的智能可穿戴设备出现在我们的眼前&#xff0c;智能手环&#xff0c;智能眼镜、智能防丢器等&#xff0c;防丢器就可以很方便的给出提醒。 目前防丢器的种类有 蓝牙防丢器GPS防丢器RFID防丢器WIFI防丢器等 本文主要讲解蓝牙防丢…

【渝粤教育】国家开放大学2018年春季 8663-22T老年保健按摩 参考试题

科目编号&#xff1a;8663 座位号 2017-2018学年度第二学期期末考试 老年保健按摩试题 2018年7月 一、名词解释&#xff08;本大题共5小题&#xff0c;每小题4分&#xff0c;共计20分&#xff09; 1.老年病&#xff1a; 2.耳穴疗法&#xff1a; 3.拔罐疗法&#xff1a; 4.刮…

PoE交换机为什么值得你选择?

PoE交换机的应用范围很广泛&#xff0c;它与普通的交换机有什么区别呢&#xff1f;PoE交换机为什么值得你选择呢&#xff1f;接下来飞畅科技的小编就来为大家详细介绍下&#xff0c;一起来看看吧&#xff01; PoE交换机除了具备普通交换机的功能外&#xff0c;还具备有PoE供电…

【物联网工厂大揭秘】电路板、数传模块 是怎么生产制造出来的?

【物联网工厂大揭秘】电路板、数传模块 是怎么生产制造出来的&#xff1f;

【渝粤教育】国家开放大学2018年秋季 0062-22T港台文学专题讲座 参考试题

试卷编号&#xff1a;0077 2018—2019学年度第一学期期末考试 古代汉语专题试题 2019年1月 一、名词解释&#xff08;每小题5分&#xff0c;共20分&#xff09; 1&#xff0e;金文2&#xff0e;表敬副词3&#xff0e;六书4&#xff0e;通假字1.“说文四大家”中注重归纳体例特…

Java中的LinkedHashMap

介绍&#xff1a; LinkedHashMap是一个Map实现&#xff0c;它维护其元素的插入顺序。 它扩展了HashMap类&#xff1a; public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>就像HashMap一样 &#xff0c;它允许存储一个null键和许多n…

从十四五规划看 物联网(NB-IoT、Cat.1、5G)将何去何从?

第九届中国电子信息博览会&#xff08;CITE2021&#xff09;联合同期的第97届中国电子展将在深圳会展中心举办。集中展示包括智慧家庭、5G物联网、智能网联汽车、网信产业、工业互联网、集成电路、新型显示、大数据存储、基础电子元器件等代表电子信息产业未来发展的核心内容。…

【渝粤教育】国家开放大学2018年秋季 0233-22T学前儿童语言教育 参考试题

科目编号&#xff1a;0248 座位号 2018-2019学年度第一学期期末考试 电工电子技术 试题 2019年1月 填空题&#xff08;每小题 6分&#xff0c;共30分&#xff09; 1&#xff0e;电路由__________&#xff0c;__________&#xff0c;_____________组成。 2.己知正弦电流200s…

工业交换机的定义和应用

工业交换机定义&#xff1a; 交换机英文名称为Switch&#xff0c;也称为交换式集线器&#xff0c;交换机是构建网络平台的“基石”&#xff0c;又称网络开关它是一种基于MAC地址(网卡的硬件标志)识别&#xff0c;能够在通信系统中完成信息交换功能的设备。其工作原理可以简单地…

NB-IoT与LoraWan技术分析与前景展望

物联网的快速发展对无线通信技术提出了更高的要求&#xff0c;专为低带宽、低功耗、远距离、大量连接的物联网应用而设计的LPWAN(low-power Wide-Area Network&#xff0c;低功耗广域网)也快速兴起。物联网应用需要考虑许多因素&#xff0c;例如节点成本&#xff0c;网络成本&a…

【渝粤教育】国家开放大学2018年秋季 0314-22T兽医基础 参考试题

试卷代码&#xff1a;0341 2018-2019学年度第一学期期末考试 高级英语听力&#xff08;2&#xff09;试题 2019年1月 注 意 事 项 一、将你的准考证号、学生证号、姓名及分校&#xff08;工作站&#xff09;名称填写在答题纸规定栏内。 考试结束后&#xff0c;把试卷和答题纸放…