目录

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)不可变容器

  

Java容器-引用分类与部分Map用法的更多相关文章

  1. Java 容器源码分析之 Map

    ava.util 中的集合类包含 Java 中某些最常用的类.最常用的集合类是 List 和 Map.List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建 ...

  2. Java容器 | 基于源码分析Map集合体系

    一.容器之Map集合 集合体系的源码中,Map中的HashMap的设计堪称最经典,涉及数据结构.编程思想.哈希计算等等,在日常开发中对于一些源码的思想进行参考借鉴还是很有必要的. 基础:元素增查删.容 ...

  3. Java容器-引用数据类型排序+TreeSet、TreeMap底层实现

    目录 1.冒泡排序的实现 2.比较接口(普通数据类型.引用数据类型) 普通数据类型:冒泡排序 引用数据类型:包装类(Integer.String.Character.Date) 自定义类型:实体类:i ...

  4. Java容器基础概况

    一.什么是Java容器 书写程序时,我们常常需要对大量的对象引用进行管理.为了实现有效的归类管理,我们常常将同类的引用放置在同一个数据容器中.Java容器类是java提供的工具包,包含了常用的数据结构 ...

  5. java-初识引用分类及Map实现类WeakHashMap

    1.同样的,话不多讲直接上代码 (1)认识了解下引用分类及其作用 package com.otherMapProduce; import java.lang.ref.WeakReference; /* ...

  6. 【Java心得总结七】Java容器下——Map

    我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...

  7. Java容器:Map

    1. Map概述 1.1. Map类的继承关系 1.2. 几个Map接口类概念 1.3. Map类的通用方法 2. HashMap 2.1. 构造函数 2.2. 数据结构 2.3. 存储实现 3. H ...

  8. Java 容器(list, set, map)

    java容器类库的简化图: (虚线框表示接口, 实线框表示普通的类, 空心箭头表示特定的类实现了接口, 实心箭头表示某个类可以生成箭头所指的类对象) 继承Collection的主要有Set 和 Lis ...

  9. 【Java心得总结五】Java容器上——容器初探

    在数学中我们有集合的概念,所谓的一个集合,就是将数个对象归类而分成为一个或数个形态各异的大小整体. 一般来讲,集合是具有某种特性的事物的整体,或是一些确认对象的汇集.构成集合的事物或对象称作元素或是成 ...

随机推荐

  1. python基础===python自带idle的快捷键

    Ctrl + [ Ctrl + ]   缩进代码Alt+3 Alt+4 注释.取消注释代码行Alt+5 Alt+6 切换缩进方式 空格<=>TabAlt+/ 单词完成,只要文中出现过,就可 ...

  2. rabbitmq集群搭建方法简介(测试机linux centos)【转】

    本文将介绍四台机器搭建rabbitmq集群: rabbitmq IP和主机名(每台机器已安装RabbitMQ 3.5.6, Erlang 18.1) 192.168.87.73 localhost73 ...

  3. MAC 文件被锁定

    从windows拷贝到MAC的文件,有时候会被锁定.右键-简介-已锁定也是灰色的,无法取消: xattr -l 文件名 xattr -d com.apple.FinderInfo 文件名

  4. Struts2使用

    Struts2是一个基于MVC设计模式的Web应用框架.在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互.Struts 2是Struts的下一代产品,是在 ...

  5. Linux上java环境变量配置

    1.java配置 配置环境变量在/etc/profile下增加 # set Java environment JAVA_HOME=/usr/share/jdk1.6.0_43 PATH=$JAVA_H ...

  6. 响应式设计:根据不同设备引不同css样式

    <link rel="stylesheet" media="screen and (max-width:600px)" href="small. ...

  7. ssh连接远程主机免密登入

    核心思想: 1.本地主机生成公钥私钥,私钥自己存着,公钥传到远程主机.ssh文件夹下authorized_keys文件(默认是这个,用追加的方式) 2.本地连接远程主机,公私钥对上就可以免密登入了. ...

  8. vscode vue配置和一些其它辅助【工具篇】

    后续有补充就经常更新

  9. 【LOJ】#2586. 「APIO2018」选圆圈

    题解 不旋转坐标系,TLE,旋转坐标系,最慢一个点0.5s--maya,出题人数据水平很高了-- 好吧,如果你不旋转坐标系,写一个正确性和复杂度未知的K - D树,没有优化,你可以得到87分的好成绩 ...

  10. Wannafly挑战赛18 C - 异或和

    思路:我刚开始是想旋转四次坐标,每次用bit计算每个点左上角的点到这个点的距离,TLE了.... 这种算曼哈顿距离的可以将x 轴和 y 轴独立开来,分别计算. #include<bits/std ...