WeakHashMap:
对象所占用的区域是不能直接操作的,都是通过引用来操作。引用分类:
1.强引用(StrongReference):gc(垃圾回收机制)运行时不回收。例如字符串常量池。字符串虽然你不用了,但是别人可能使用,字符串常量池是可以共享的,因此不能回收。
2.软引用(SoftReference):gc运行的时候可能回收也可能不回收,jvm内存不够的时候才回收。软引用可用于制作缓存,常用的数据不需要经常获取,把它缓存下来,jvm内存不够的时候才把这个对象占用的区域进行回收。
3.弱引用(WeakReference):gc运行的时候立即回收。
4.虚引用(Phantomreference):类似于无引用,没有引用,这个引用不能单独使用,只要用于跟踪对象被回收的状态,比如回收之前把这个对象进行获取,不能单独使用,必须与引用队列(ReferenceQueue)联合使用。WeakHashMap:
键为弱引用,回收键后自动删除key-value对象。
import java.lang.ref.WeakReference;
/*** 引用分类:强、软、弱、虚* 强与弱引用*/
public class RefDemo {public static void main(String[] args) {//"bjsxt is very good"存放在字符串常量池中,是共享的, 不能回收。String str = "bjsxt is very good";//弱引用 管理 对象WeakReference<String> wr =new WeakReference<String>(str);System.out.println("gc运行前:"+wr.get());//gc运行前:bjsxt is very good//断开引用str =null;//通知回收
        System.gc();//开始回收
        System.runFinalization();System.out.println("gc运行后:"+wr.get()); //gc运行后:bjsxt is very good,所以常量池的对象不能回收。如果改为String str = new String("bjsxt is very good");则第二次输出为null.
    }
}import java.util.WeakHashMap;
/*** WeakHashMap 键为弱类型,gc运行立即回收,回收键后自动删除key-value对象。*/
public class WeakHashMapDemo {public static void main(String[] args) {WeakHashMap<String,String> map =new WeakHashMap<String,String>();//测试数据//常量池对象,不会回收map.put("abc", "a");map.put("d", "test");//gc运行,已被回收map.put(new String("bjsxt"), "c");map.put(new String("dsf"), "d");//通知回收
        System.gc();System.runFinalization();System.out.println(map.size());//2System.out.println(map.get("abc"));//aSystem.out.println(map.get("d"));//testSystem.out.println(map.get("bjsxt"));//null,不回收则输出cSystem.out.println(map.get("dsf"));//null,不回收则输出d//WeakHashMap的作用,可以回收内存。
    }}IdentityHashMap:键以地址来区分是不是同一个,与HashMap不同,HashMap比较的是key的hashcode和equals。/*** IdentityHashMap 键比较地址来去重*/
public class IdentityHashMapDemo {public static void main(String[] args) {IdentityHashMap<String ,String> map =new IdentityHashMap<String,String>();//常量池中的"a",共享。map.put("a", "a1");map.put("a", "a2");System.out.println(map.size());//1map.put(new String("a"), "a3");map.put(new String("a"), "a4");System.out.println(map.size());//3
    }
}EnumMap:
键必须为枚举的值(枚举就是常量的集合)。
构造器:public EnumMap(指定枚举class对象)。
/*** EnumMap要求键为枚举*/
public class EnumMapDemo {public static void main(String[] args) {EnumMap<Season,String> map =new EnumMap<Season,String>(Season.class);//Season.class为枚举class对象//存放值map.put(Season.SPRING, "春困");map.put(Season.SUMMER, "夏无力");map.put(Season.AUTUMN, "秋乏");map.put(Season.WINTER, "冬眠");System.out.println(map.size());//4
    }
}
//季节
enum Season{SPRING,SUMMER,AUTUMN,WINTER
}同步控制与只读设置:
同步控制:多线程里面对这个访问的对象要保证线程安全,主要是容器和集合的线程安全。
常用容器ArrayList、HashSet、HashMap都不是线程安全的(Hashtable是线程安全的,Vector是线程安全的)。Collections提供了synchronizedXxx()方法,将指定容器包装成同步synchronizedList()、synchronizedSet()、synchronizedMap().
/*** 使用Collections管理同步 容器* synchronizedList()synchronizedSet()synchronizedMap()*/
public class Demo01 {public static void main(String[] args) {List<String> list =new ArrayList<String>();list.add("a");list.add("b");//list可以同步List<String> synList =Collections.synchronizedList(list);//这样list就是线程安全了。System.out.println("线程安全的list制作完毕");}
}/**只读设置
1、emptyXxx()  空的不可变的集合
emptyList()
emptyMap()
emptySet()2、singletonXxx() 一个元素且不可变的集合
singleton(T o)
singletonList(T o)
singletonMap(K key, V value) 3、unmodifiableXxx() 不可变容器
unmodifiableList(List<? extends T> list)
unmodifiableSet(Set<? extends T> s)
unmodifiableMap(Map<? extends K,? extends V> m) */
public class Demo02 {public static void main(String[] args) {Map<String,String> map = new HashMap<String,String>();map.put("test", "test");map.put("bjsxt", "bjsxt");//控制只读Map<String,String> map2 = Collections.unmodifiableMap(map);//map2.put("a", "a"); //报错。不能增操作System.out.println(map2.size());//一个元素的容器测试String s = new String();//空字符串List<String> list = Collections.singletonList(new String());list.add("test");//报错,不能操作,已经有了一个元素(空串)list.add("bjsxt"); //只能包含一个元素的容器,不能增加。
    }public static Set<String> oper(Set<String> set){if(null==set){return Collections.EMPTY_SET; //外部获取避免NullPointerException
        }//操作return set;}
}

java10 WeakHashMap相关推荐

  1. java weakhashmap用法_Java WeakHashMap指南

    概述 在这篇文章中,我们将探索 java.util 包中的WeakHashMap. 为了理解数据结构,我们将在这里使用它来推出一个简单的缓存实现.但是,请记住,这是为了了解地图的工作原理,并且创建自己 ...

  2. java 弱引用 集合_java 弱引用集合类WeakHashMap

    java 弱引用集合类WeakHashMap Java集合框架中的WeakHashMap类是Map接口的一种特殊实现.它实现了Map接口,继承了AbstractMap抽象类.它实现了对key的弱引用. ...

  3. java 10新_【Java基础】Java10 新特性

    Java10 新特性 局部变量类型推断 局部变量的显示类型声明,常常被认为是不必须的. 场景一:类实例化时.在声明一个变量时,总是习惯了敲打两次变量类型,第一次用于声明变量类型,第二次用于构造器. 场 ...

  4. WeakHashMap和四种引用总结:

    WeakHashMap 当一个键对象被GC(垃圾回收)回收时,响应的值对象的引用从map中删除,WeakHashMap能节约存储空间,来实现缓存那些非必要的数据 四种类型的引用: 强运用(Srtron ...

  5. 045_引用分类和WeakHashMap

    一. 引用分类 1. 强引用: StrongReference, 引用指向对象, gc(Garbage collection)运行时不回收对象. 2. 软引用: SoftReference, gc(G ...

  6. LinkedHashMap 实现缓存(LRU、FIFO、weakhashMap)

    原文地址:https://www.jianshu.com/p/c627a30cf14a 在文中使用了LinkedHashMap实现了LRU和FIFO缓存机制.实际上在LinkedHashMap的设计上 ...

  7. 浅谈WeakHashMap

    Java WeakHashMap 到底Weak在哪里,它真的很弱吗?WeakHashMap 的适用场景是什么,使用时需要注意些什么?弱引用和强引用对Java GC有什么不同影响?本文将给出清晰而简洁的 ...

  8. vc为啥要更新java_Java9被无情抛弃,Java8直接升级到Java10 ! !

    Java 8 即将在 2019 年停止免费向企业提供更新的文章,企图迫使用户向更新一代的 Java 版本升级,但让人遗憾的是,小编今天收到了 Oracle Java 版本的升级推送,装完居然是 Jav ...

  9. java10下编译lombok注解的代码

    序 本文主要研究下在带有lombok(1.16.20版本)注解的代码在java10下的编译问题. 问题 Fatal error compilingat org.apache.maven.lifecyc ...

最新文章

  1. linux 函数 缩小文件,linux文件系统的处理函数
  2. python基础之拆包、匿名函数、文件的初级应用
  3. springboot全局异常处理_SpringBoot:如何优雅地处理全局异常
  4. log4cplus:一个按天为单位、按不同类型归类的配置文件
  5. Spark DF:关于Row中的数值获取问题
  6. 【C++/C FAQ】如何输入和输出十六进制的整数
  7. 面试准备JSONP(一)
  8. 编译原理-陈火旺-第三版-课后习题第八章123题
  9. .xmind用什么软件打开_swf文件用什么打开 怎么把swf转换成mp4
  10. 9008v android操作系统 电量,三星N9008V (GALAXY Note 3 移动4G Android 4.4)救砖教程 救砖包 刷回官方系统支持OTA升级...
  11. DirectX修复工具的详细使用步骤介绍
  12. mysql binlog常用操作
  13. c语言long类型转换成string,如何在C ++中将long转换为string?
  14. 蓝鹰立德丨2021年个税汇算清缴之未雨绸缪(上)
  15. matlab的打印输出方式
  16. pat B1032 挖掘机技术哪家强 (20分)
  17. 【自然语言处理】【多模态】BLIP:面向统一视觉语言理解和生成的自举语言图像预训练
  18. 古典密码学、DES对称加密、3DES对称加密知识总结和实验
  19. 淘宝小二腐败案,到底谁是黑幕?
  20. 不等式约束二次规划——有效集法

热门文章

  1. python的turtle画小人_Pythonturtle画图库画姓名实例
  2. bugly android8.1加固,2020-09-27 Bugly Android热更新使用指南
  3. 处理mp3_如何把MP3转换成FLAC格式?这三个方法简单快速
  4. go的空接口三种用法
  5. java 复制标记_java-对于大文件,在标记inputStream并将其重置...
  6. linux 查看命令帮助,Linux中查看帮助相关的命令整理
  7. 杀毒软件可以查杀所有计算机病毒吗,好的杀毒软件可以查杀任何病毒,对还是错?...
  8. python 血缘进程共享数据
  9. mysql性能优化学习_mysql学习——性能优化之sql优化
  10. 用python海龟制图画花瓣_Python竟能画这么漂亮的花,帅呆了(代码分享)