资讯专栏INFORMATION COLUMN

猫头鹰的深夜翻译:Java WeakHashMap

BothEyes1993 / 2888人阅读

摘要:本文简介类概览类构造器总结类构造方法类使用举例类概览是一个实现了接口,并且键为型的哈希表。中的条目不再被正常使用时,会被自动删除。它的键值均支持。和绝大多数的集合类一样,这个类不是同步的。

本文简介

WeakHashMap类概览

WeakHashMap类构造器总结

WeakHashMap类构造方法

WeakHasjMap类使用举例

1. WeakHashMap类概览

WeakHashMap是一个实现了Map接口,并且键为weak型的哈希表。WeakHashMap中的条目不再被正常使用时,会被自动删除。它的键值均支持null。这个类类似于HashMap类,也具有初始容量和负载因子这样的效率参数。和绝大多数的集合类一样,这个类不是同步的。需要使用Collections.synchronizedMap方法来进行同步控制。弱引用--如果一个对象只有一个弱引用,那么垃圾回收期可以随时收回该对象的内存。它不需要等到系统内存不足时才回收。通常,它的内存会在下一次垃圾收集器运行时释放。

2. WeakHashMap的构造器

WeakHashMap(): 构造一个新的,空的WeakHashMap,初始容量为16,负载因子为0.75

WeakHashMap(int initialCapacity): 构造一个新的,空的WeakHashMap, 初始容量为initialCapacity,负载因子为0.75

WeakHashMap(int initialCapacity, float loadFactor): 构造一个新的,空的WeakHashMap, 初始容量为initialCapacity,负载因子为loadFactor

WeakHashMap(Map m): 利用已有的map构造WeakHashMap

3. WeakHashMap类的方法

void clear(): 删除所有的条目

boolean containsKey(Object key): 如果有该键,返回true

boolean containsValue(Object value): 如果有一个或多个value值,返回true

Set< Map.Entry>entrySet(): 返回键值视图

void forEach(BiConsumer action): 对此映射中的每个条目执行给定操作,直到处理完所有条目或操作引发异常。

V get(Object key): 返回指定键映射到的值,如果此映射不包含键的映射,则返回null。

boolean isEmpty(): 如果此映射不包含键 - 值映射,则返回true。

4. WeakHashMap类使用示例
import java.util.Map;
import java.util.Map.Entry;
import java.util.WeakHashMap;
public class WeakHashMapExample {
    public static void main(final String[] args) {
        final Map map = new WeakHashMap<>();
        Key key1 = new Key("ACTIVE");
        final Key key2 = new Key("INACTIVE");
        map.put(key1, new Project(100, "Customer Management System", "Customer Management System"));
        map.put(key2, new Project(200, "Employee Management System", "Employee Management System"));
        key1 = null;
        System.gc();
        for (final Entry entry : map.entrySet()) {
            System.out.println(entry.getKey().getKey() + "   " + entry.getValue());
        }
    }
}
class Key {
    private String key;
    public Key(final String key) {
        super();
        this.key = key;
    }
    public String getKey() {
        return key;
    }
    public void setKey(final String key) {
        this.key = key;
    }
}

输出:

INACTIVE   [project id : 200, project name : Employee Management System, 
           project desc : Employee Management System ]


想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72620.html

相关文章

  • 头鹰深夜翻译:JDK Vs. JRE Vs. JVM之间区别

    摘要:什么是为执行字节码提供一个运行环境。它的实现主要包含三个部分,描述实现规格的文档,具体实现和满足要求的计算机程序以及实例具体执行字节码。该类先被转化为一组字节码并放入文件中。字节码校验器通过字节码校验器检查格式并找出非法代码。 什么是Java Development Kit (JDK)? JDK通常用来开发Java应用和插件。基本上可以认为是一个软件开发环境。JDK包含Java Run...

    blair 评论0 收藏0
  • 头鹰深夜翻译JavaCAS(Compare And Swap)

    摘要:否则它就会用新的值替代当前值。在这种情况下,锁可能会优于原子变量,但在实际的争用级别中,原子变量的性能优于锁。在中引入了另外一个构件。 题目要求 在我们深入了解CAS(Compare And Swap)策略以及它是如何在AtomicInteger这样的原子构造器中使用的,首先来看一下这段代码: public class MyApp { private volatile int ...

    hosition 评论0 收藏0
  • 头鹰深夜翻译Java 10JEP 286-局部变量类型推断

    摘要:在此基础上又向前迈进了一步局部变量类型推断允许开发人员跳过局部变量的类型声明局部变量是指在方法定义,初始化块,循环和其它的如代码块,会推断该局部变量的类型。 前言 之前面试的时候问了我是否了解JDK10的变化,一时回答不出来,所以只回答了JDK8中的函数式编程和流编程。今天看到这篇讲JAVA10的文章,顺便了解一下。 正文 JAVA10的所有新特性请参考这里。在所有的JEP中,JEP-...

    chavesgu 评论0 收藏0
  • 头鹰深夜翻译:BlockingQueue和持续管理

    摘要:我们将使用单个线程管理任务放入队列的操作以及从队列中取出的操作。同时这个线程会持续的管理队列。另一个线程将用来创建,它将一直运行知道服务器终止。此线程永远不会过期,有助于实现持续监控。这些请求将会自动的被获取,并在线程中继续处理。 在Java中,BlockingQueue接口位于java.util.concurrent包下。阻塞队列主要用来线程安全的实现生产者-消费者模型。他们可以使用...

    YanceyOfficial 评论0 收藏0
  • 头鹰深夜翻译:使用JAVA CompletableFuture20例子

    摘要:这个例子想要说明两个事情中以为结尾的方法将会异步执行默认情况下即指没有传入的情况下,异步执行会使用实现,该线程池使用一个后台线程来执行任务。这个例子展示了如何使用一个固定大小的线程池来实现大写操作。 前言 这篇博客回顾JAVA8的CompletionStageAPI以及其在JAVA库中的标准实现CompletableFuture。将会通过几个例子来展示API的各种行为。 因为Compl...

    AZmake 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<