SoftNode softNode = temp.get(key);
return softNode == null ? null : (V) softNode.get();
}
@Override
public V put(K key, V value) {
clearQueue();
// 创建 SoftNode对象
SoftNode softNode = new SoftNode(key, value, queue);
// 返回key之前所对应的SoftNode对象,即oldSoftNode
SoftNode oldSoftNode = temp.put(key, softNode);
// 如果oldSoftNode为null,就返回null,否则就返回 oldSoftNode所软引用的 Value
return oldSoftNode == null ? null : (V) oldSoftNode.get();
}
@Override
public boolean containsKey(Object key) {
clearQueue();
return temp.containsKey(key);
}
@Override
public V remove(Object key) {
clearQueue();
SoftNode<K, V> remove = temp.remove(key);
return remove == null ? null : remove.get();
}
@Override
public int size() {
clearQueue();
return temp.size();
}
/**
* 通过软引用队列内的 SoftNode,获取Key,然后temp 清除此 Key
* @see ReferenceQueue poll()
* poll() -- 类似于 stack 的pop(),移除并返回此对象
*/
private void clearQueue() {
SoftNode poll;
while ((poll = (SoftNode) queue.poll()) != null) {
temp.remove(poll.key);
}
}
/**
* 对V进行软引用的类
* @param <K> key,用于当 V 被回收后,temp 可以通过 key 进行移除
* @param <V> Value,真正的值
*
* 传入的queue,用于当Value被回收后,将 SoftNode对象放入 queue中,
* 以便于表示 某 SoftNode对象中的Value 已经被收回了。
*/
private class SoftNode<K, V> extends SoftReference<V> {
K key;
public SoftNode(K k, V v, ReferenceQueue queue) {
super(v, queue);
key = k;
}
}
}
### 2、强引用与软引用的测试对比:
![](https://img-blog.csdnimg.cn/20210109113651280.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1b3J1aV9qYXZh,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20210109113705974.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1b3J1aV9qYXZh,size_16,color_FFFFFF,t_70) 测试中可以明显的看到:
### 最后在出来放一波福利吧!希望可以帮助到大家!
> [**戳此获取免费学习资料**](https://gitee.com/vip204888/java-p7)
千千万万要记得:多刷题!!多刷题!!
之前算法是我的硬伤,后面硬啃了好长一段时间才补回来,算法才是程序员的灵魂!!!!
篇幅有限,以下只能截图分享部分的资源!!
(1)多线程(这里以多线程为代表,其实整理了一本JAVA核心架构笔记集)
![image](https://img-blog.csdnimg.cn/img_convert/524391390f49058e839b418c1be534e2.png)
(2)刷的算法题(还有左神的算法笔记)
![image](https://img-blog.csdnimg.cn/img_convert/f81baeeb2cbdd0ab8151a80025fa4df0.png)
(3)面经+真题解析+对应的相关笔记(很全面)
![image](https://img-blog.csdnimg.cn/img_convert/d969758c783a73c062e3352f0b3dcf13.png)
(4)视频学习(部分)
> ps:当你觉得学不进或者累了的时候,视频是个不错的选择
![image](https://img-blog.csdnimg.cn/img_convert/bfc6313148b65c8b5546bbdf1a9b740b.png)
其实以上我所分享的所有东西,有需要的话我这边可以免费分享给大家,但请一定记住获取方式:[点击这里前往免费获取](https://gitee.com/vip204888/java-p7)
)
> ps:当你觉得学不进或者累了的时候,视频是个不错的选择
[外链图片转存中...(img-yxjy4CDT-1628338927855)]
其实以上我所分享的所有东西,有需要的话我这边可以免费分享给大家,但请一定记住获取方式:[点击这里前往免费获取](https://gitee.com/vip204888/java-p7)
在这里,最后只一句话:祝大家offer拿到手软!!