当前位置: 首页 > news >正文

Java容器-引用分类与部分Map用法

目录

1、引用分类

2、了解WeakHashMap、IdentityHashMap、EnumMap

3、同步控制与只读设置

代码实现

1、引用分类(面试)

  强引用(StrongReference):引用指向对象,gc运行时,不回收。

  弱引用(SoftReference):gc运行时可能回收(当jvm内存不足时)。

  软引用(WeakReference):当gc运行时,对象回收。

  虚引用(phantomReference):类似于无引用,主要跟踪对象被回收的对象,不能单独使用,要与ReferenceQueue联合使用

  目的:避免对象长期驻留在内存中,解决垃圾回收机制时机问题。 

2、WeakHashMap(键若引用,回收后自动删除key-value对象)

 public static void main(String [] args){
        //结果:map的size为2,new String()为软对象被回收
        WeakHashMap weakHashMap=new WeakHashMap();
        //“key1”、“key2”存在于常量池为强对象不会被回收
        weakHashMap.put("key1","hello");
        weakHashMap.put("key2","hello2");
        weakHashMap.put(new String("key3"),"hello3");
        System.gc();
        System.runFinalization();
        System.out.println(weakHashMap.size());
    }

3、同步控制与只读操作

(1)同步控制

  因为容器中有一些是线程安全,有一些是线程不安全,那么怎么把线程不安全的容器也调整成线程安全呢?

  如:Hashtale(安全)-HashMap(不安全)             ArryList-LinkedList(不安全)-Vector(安全)

  

(2)只读操作

  1)空的不可变的集合

  

  2)一个元素不可变的集合

  

  3)不可变容器

  

转载于:https://www.cnblogs.com/qiuyong/p/6575525.html

相关文章:

  • 在Kotlin编写RecyclerView适配器(KAD 16)
  • web-app 与本地app的区别
  • JS 面向对象例题
  • Idea中的插件-列出Java Bean的所有set方法
  • JavaScript的数据类型与变量
  • Android 权限的实现
  • 看《神探夏洛克》经典台词
  • 挂载硬盘,并分区格式化
  • JavaScript中的对象
  • 用vs2015 编译 web app ionic
  • HTTP访问控制(CORS)
  • 02_SimpleTrigger
  • gbdt调参的小结
  • BZOJ 2055: 80人环游世界 [上下界费用流]
  • 给object数组进行排序(排序条件是每个元素对象的属性个数)
  • [译] 怎样写一个基础的编译器
  • “大数据应用场景”之隔壁老王(连载四)
  • 【RocksDB】TransactionDB源码分析
  • 2017前端实习生面试总结
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • const let
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • ES6之路之模块详解
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • IOS评论框不贴底(ios12新bug)
  • LeetCode29.两数相除 JavaScript
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • markdown编辑器简评
  • MQ框架的比较
  • ReactNativeweexDeviceOne对比
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • vue--为什么data属性必须是一个函数
  • 阿里云Kubernetes容器服务上体验Knative
  • 前端工程化(Gulp、Webpack)-webpack
  • 前嗅ForeSpider中数据浏览界面介绍
  • 悄悄地说一个bug
  • 收藏好这篇,别再只说“数据劫持”了
  • 系统认识JavaScript正则表达式
  • 一个项目push到多个远程Git仓库
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • #pragma pack(1)
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (12)Linux 常见的三种进程状态
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (转)http-server应用
  • (转)nsfocus-绿盟科技笔试题目
  • (转载)Linux 多线程条件变量同步
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET框架设计—常被忽视的C#设计技巧