当前位置: 代码迷 >> 综合 >> 不是太细的java自学笔记进阶篇5(p548-559)(Map,HashMap,TreeMap,Properties,Collections)
  详细解决方案

不是太细的java自学笔记进阶篇5(p548-559)(Map,HashMap,TreeMap,Properties,Collections)

热度:57   发布时间:2023-12-17 14:07:58.0

目录:

Map接口

HashMap()底层源码分析:

Map中的常用方法:

TreeMap

Properties

Collections工具类:


Map接口

   

一般是通过key来查找数据,所以value中的类不需要重写hashCode()

HashMap()底层源码分析:

 

对于情况2,3。在JDK7中是把新元素添加到数组中,其他元素放到链表中。在JDK8中是把新元素方法链表尾端。

注意当HashCode相同时,我们会直接替换掉原来的数据。

关于扩容方式:JDK8中new了衣蛾HashMap是没有真正创建的数组的,只有在第一个put了之后才会分配内存空间。并且扩容是直接扩容两倍(初始为16)。

注意:当数组的某个索引位置上的元素按照链表的方式存在的数据个数大于8时,并且整个数组长度>64时,这个索引位置上的所有数据改为使用红黑树存储。(方便查找)

 

关于添加数据和扩容的源码分析:

 

由上述我们可以看出:当整个数组的长度大于等于我们的扩容临界值(根据填充因子决定)并且我们所要存放的数据在经过了HashCode计算之后的位置不为空的时候。我们就需要对整个数组进行扩容。注意了当我们对整个数组进行扩容了之后,会对所有的数据进行重新的位置分配。(JDK7)

 

LinkedHashMap()底层源码分析:

重写了创建新节点方法:

   

Entry的before和after决定了我们可以按照顺序遍历。

Map中的常用方法:

 

都是抽象方法:使用HashMap来举例

元视图操作方法的原理:

 

TreeMap

由于要按照key进行排序,所以需要把key确定成同一个类的对象。

   

Properties

用来配置,本身也是Map的一个子类:

 

读取配置信息是在当前项目目录下的.properties文件中。

在idea中新建此类型目录的方式为:

项目名右键->new->Resource Bundle。添加名称之后会自动创建.properties类型文件,如果添加的是一个File类型,需要自己手动添加后面的.properties。

  

注意这个地方使用单元测试会出错,提示没法找到配置文件。

如果配置文件中有中文,我们需要在idea的配置中把配置勾上

 

Collections工具类:

 

操作数组的工具类:Array

  

当我们需要线程安全时,我们一般不会去创建HashTable,Vector类型的数据,而是使用以下方法创建线程安全的类。

 

 

 

 

  相关解决方案