佛山网站优化有,移动分销系统代理,如何做的网站排第一,官方app文章目录 0.架构图1.vector解析2.LinkedList分析2.1源码分析2.2迭代器遍历的三种方式 3.set接口的使用方法3.1基本使用说明3.2基本遍历方式3.3HashSet引入3.4数组链表模拟3.5hashset扩容机制3.6hashset源码解读3.7扩容*转成红黑树机制**我的理解 0.架构图 1.vector解析 和之前介… 文章目录 0.架构图1.vector解析2.LinkedList分析2.1源码分析2.2迭代器遍历的三种方式 3.set接口的使用方法3.1基本使用说明3.2基本遍历方式3.3HashSet引入3.4数组链表模拟3.5hashset扩容机制3.6hashset源码解读3.7扩容*转成红黑树机制**我的理解 0.架构图 1.vector解析 和之前介绍的这个ArrayList相比这个vector属于线程安全操作他的这个基本的使用和我们的这个Arraylist没有太大的区别但是这个扩容机制和我们的这个Arraylist不太一样
在默认的情况下我们的这个空间容量的大小就是10然后会按照2倍扩容这个就是和Arraylist的一个区别因此下面的这个add前面的10个数据是不会进行扩容的只有后面的add(10)才会进行这个扩容的操作 我们可以自己去进行debug调试这个方法就是我们的s是一个默认的参数当我们的数据长度小于这个数据的时候根本就不会进行grow里面去进行扩容当我们的这个循环结束的时候已经是插入10个数据这个时候两个是相等的才会调用这个grow方法 在我们的这个grow方法里面这个capacityIncrement小于0对于这个三木而言就是后面的这个oldcapacity作为结果操作所以会进行这个二倍扩容newcapacity就是10*220 2.LinkedList分析
linkedlist的本质上就是一个双向的链表
2.1源码分析
我们以添加节点和删除节点为例进行源码的分析
首先我们创建这个lineedlist的时候就是进行的初始化的工作这个时候双向链表里面是没有节点的因此这个时候的size0,然后去创建第一个节点; 添加第一个节点的时候可以看到这个首先还是进行的这个装箱的过程把这个基本的数据类型转换为我们的常用类integer 下面的这个是进行的第一次数据的插入过程因为这个时候双向链表就是空的所以这个时候我们的last,first都是指向的这个604地址空间位置 当我们插入第二个数据的时候这个first指向的还是第一个位置的节点但是这个last已经指向了新的节点这个地址也是进行了更新615但是我们的这个l还是指向的第一个节点地址位置 接下来再次进行数据的插入这个时候我们的lat再次进行更新这个l指向的还是我们的最后一个节点的前面的一个位置的地址 下面的这个是进行的remove方法的调用这个时候就是删除我们的这个链表里面的第一个节点使用的是这个unlinkFirst方法实现的 这个方法里面叫这个f的数值变为null,指向的下一个节点也是空的这个时候这个节点就会被作为垃圾回收掉这个时候我们的第二个数据就是头结点因此这个first指向了原来的609地址位置 2.2迭代器遍历的三种方式
下面的这个就是我们的循环双向链表支持的三个遍历的方式linkedlist.get(i)表示拿出来这个双向链表里面的第i个下标位置的节点数值 3.set接口的使用方法
3.1基本使用说明
set接口实现类创建的实例化对象即这个接口对象实现这个接口的类的对象
1.添加元素不可以是重复的
2.没有顺序的添加顺序和取出来的这个顺序不是一样的
3.可以添加空值null
4.取出来这个顺序虽然不是添加时候的这个顺序但是这个取出来的顺序是固定的不会每一次都发生变化 set接口是collection的子接口因此这个迭代器遍历set也是可以使用的
3.2基本遍历方式
这个就是我们的迭代器遍历和增强for循环两个方式进行遍历但是不支持这个普通的索引因为这个里面是没有get方法的没有办法根据下标进行数据的查找 3.3HashSet引入
我们创建这个的时候实际上这个底层走的还是我们的hashmap这个东东 hashset可以存放null值但是元素不可以重复;
我们下面的算是对于这个hashset入门的一个demo案例这个案例需要用到下面的这个类我们在这个类里面实现了这个构造器和toString方法 我们创建一个hashset对象向这个里面去插入数据因为这个结构式不允许重复的所以我们第二次插入的这个lucy是不会插入成功的
但是我们的new Dog两次的这个名字是一样的可以理解为这个堆上面开辟了不同的空间但是两个引用指向的是相同的内容所以两次添加这个new的dog对象是可以成功的
接下来我们new两个同名的string对象这个时候的第二个是不会插入成功的为什么需要后续学习之后方可解答~~ 3.4数组链表模拟
hashset的底层是hashmap,hashmap的底层是数组链表红黑树
下面的这个就是数组链表的一个模拟情况就是这个数组里面的每一个元素都是一个链表的头节点我在这个上面没有完全显示
下面的先添加这个john对象然后添加jack对象继续添加rose对象每一个数组元素都是有自己的一个链表的这个就是我们后面分析源码可能会用到的数组链表结构 首先需要定义一个node的类这个里面成员就是我们的结点的数值和下一个节点内容 然后就是创建对象的过程我们把这个john放到这个里面的2下标的位置然后剩下的添加的元素都和这个john组成链表这个只是为了说明问题实际上添加的时候是进行这个这个hash的索引分配 运行结束之后我们就可以看到这个2位置对应的已经形成了一个链表这个链表里面已经有了我们插入的三个元素 3.5hashset扩容机制
1.首先hash值这个就是一个数字
2.通过对于这个哈希值的运算得到一个下标这个下标就是我们要添加这个数组元素的链表位置例如我们运算之后得到的是3就会在这个数组3下标的链表上进行元素的添加
3.如果这个位置上面没有其他的元素就会直接放到这个位置上面去如果有元素使用这个equals进行判断这个equals并不是简单的比较两个数据的内容因为这个方法我们是可以进行重写的
4.比较这个equals之后如果相等就不会进行添加否则就会尾插到这个链表的后面 3.6hashset源码解读
table就是一个属性刚开始这个table就是null,这个时候会进入这个resize方法里面去这个就是进行的扩容的操作 我们扩容的这个大小就是16但是这个16是我们的数组的大小每一个数组元素对应的这个链表多少个节点现在是不确定的后面会说到默认是8个大小 这个时候我们发现这个对象已经插入到了这个13位置我们上面的是我们自己设置的插入到2下标的位置这个是自己通过计算匹配之后插入到的这个13位置的 例如我们想要进行这个数据的插入匹配到了这个2下标的位置这个时候通过和这个johu,jack,rose一个一个的进行比对如果出现了这个equals一样的情况这个就会进行break操作否则就会把这个数据添加到我们的这个链表的3位置这个就是添加的过程 3.7扩容*转成红黑树机制**我的理解
1.上面介绍到了这个默认开辟的数组大小是16实际上这个12就是临界0.75倍的关系0.75叫做加载因子就是当我们的这个数组里面的12个位置都被占用的时候我们就会考虑扩容因为害怕剩下的4个大小不够使用这个是第一点
2.接下来就会进行2倍扩容例如从16扩到32这个时候的临界还是0.75倍即32*0.7524也就是说这个达到24之后又会考虑进行扩容操作
3.链表达到8个之后这个就会考虑进行树化操作即把这个数组链表转换为这个红黑树的结构但是这个前提条件是我们的这个数组已经大于64因为可能是因为这个数组不够长我们首先会对于这个数组进行扩容
4.如果这个数组元素足够多数组足够长而且这个链表的节点已经大于8个这个时候才会进行这个红黑树的转换通过调用这个红黑树的相关的算法
5.这个链表也不是达到8一定会树化这个8不是确定的可能是大于8才会树化可能是9可能是10这个8是一个默认值不是确定数值
6.底层源码里面的这个size并不仅仅是我们的数组元素增加的时候才会size,我们的这个数组元素对应的这个链表上面的这个node节点增加的时候我我们也会进行这个size的操作
7.上面说的这个第六点主要是为了说明什么问题就是我们的这个这个最开始数组不是16个大小吗就是达到12的时候就会触发扩容但是这个12并不是12个数组元素可能会是说这个数组只有两个元素但是这个链表上面有10个节点这个时候就是size12,我们接下来插入数据无论是节点还是数组元素都会触发扩容操作也就是说即使我们的数组大量是空的但是我们的这个链表上面的节点足够多这个也是会出触发我们的这个数组的扩容
8.首先我们进行这个数据的添加的时候首先会比较这个hash值如果哈希值不一样说明这个下标索引就不一样这个时候肯定会放进去这个时候不会进行这个equals操作当我们的这个hash值一样的时候说明我们会插入到一个链表上面去这个时候才会调用这个equals方法
9.new对象的时候hash值很难是一样的但是我们可以重写这个hasncode方法让他们的属性相同的时候就会拥有一样的hash值
如果哈希值不一样说明这个下标索引就不一样这个时候肯定会放进去这个时候不会进行这个equals操作当我们的这个hash值一样的时候说明我们会插入到一个链表上面去这个时候才会调用这个equals方法
9.new对象的时候hash值很难是一样的但是我们可以重写这个hasncode方法让他们的属性相同的时候就会拥有一样的hash值 文章转载自: http://www.morning.pjjkz.cn.gov.cn.pjjkz.cn http://www.morning.rgmd.cn.gov.cn.rgmd.cn http://www.morning.fwdln.cn.gov.cn.fwdln.cn http://www.morning.lysrt.cn.gov.cn.lysrt.cn http://www.morning.gtdf.cn.gov.cn.gtdf.cn http://www.morning.xkyst.cn.gov.cn.xkyst.cn http://www.morning.mumgou.com.gov.cn.mumgou.com http://www.morning.nyqnk.cn.gov.cn.nyqnk.cn http://www.morning.rblqk.cn.gov.cn.rblqk.cn http://www.morning.yxbdl.cn.gov.cn.yxbdl.cn http://www.morning.pxdgy.cn.gov.cn.pxdgy.cn http://www.morning.pdxqk.cn.gov.cn.pdxqk.cn http://www.morning.lbxhy.cn.gov.cn.lbxhy.cn http://www.morning.rkzk.cn.gov.cn.rkzk.cn http://www.morning.qgjgsds.com.cn.gov.cn.qgjgsds.com.cn http://www.morning.mqbsm.cn.gov.cn.mqbsm.cn http://www.morning.gjssk.cn.gov.cn.gjssk.cn http://www.morning.gbtty.cn.gov.cn.gbtty.cn http://www.morning.jkfyt.cn.gov.cn.jkfyt.cn http://www.morning.slwqt.cn.gov.cn.slwqt.cn http://www.morning.nhgkm.cn.gov.cn.nhgkm.cn http://www.morning.wrqw.cn.gov.cn.wrqw.cn http://www.morning.hymmq.cn.gov.cn.hymmq.cn http://www.morning.rxgnn.cn.gov.cn.rxgnn.cn http://www.morning.qhczg.cn.gov.cn.qhczg.cn http://www.morning.crqbt.cn.gov.cn.crqbt.cn http://www.morning.qhmgq.cn.gov.cn.qhmgq.cn http://www.morning.ryrgx.cn.gov.cn.ryrgx.cn http://www.morning.hmtft.cn.gov.cn.hmtft.cn http://www.morning.dfqmy.cn.gov.cn.dfqmy.cn http://www.morning.mbzlg.cn.gov.cn.mbzlg.cn http://www.morning.rxhn.cn.gov.cn.rxhn.cn http://www.morning.xdjsx.cn.gov.cn.xdjsx.cn http://www.morning.bpmth.cn.gov.cn.bpmth.cn http://www.morning.plfy.cn.gov.cn.plfy.cn http://www.morning.smrkf.cn.gov.cn.smrkf.cn http://www.morning.bqdpy.cn.gov.cn.bqdpy.cn http://www.morning.rchsr.cn.gov.cn.rchsr.cn http://www.morning.fcwb.cn.gov.cn.fcwb.cn http://www.morning.qhmhz.cn.gov.cn.qhmhz.cn http://www.morning.bpmtr.cn.gov.cn.bpmtr.cn http://www.morning.mcwrg.cn.gov.cn.mcwrg.cn http://www.morning.frsbf.cn.gov.cn.frsbf.cn http://www.morning.zsyqg.cn.gov.cn.zsyqg.cn http://www.morning.nssjy.cn.gov.cn.nssjy.cn http://www.morning.brkc.cn.gov.cn.brkc.cn http://www.morning.ftgwj.cn.gov.cn.ftgwj.cn http://www.morning.xhgxd.cn.gov.cn.xhgxd.cn http://www.morning.mm27.cn.gov.cn.mm27.cn http://www.morning.yhtnr.cn.gov.cn.yhtnr.cn http://www.morning.wrdlf.cn.gov.cn.wrdlf.cn http://www.morning.fwjfh.cn.gov.cn.fwjfh.cn http://www.morning.hlshn.cn.gov.cn.hlshn.cn http://www.morning.lyldhg.cn.gov.cn.lyldhg.cn http://www.morning.fxygn.cn.gov.cn.fxygn.cn http://www.morning.ymwcs.cn.gov.cn.ymwcs.cn http://www.morning.snygg.cn.gov.cn.snygg.cn http://www.morning.nqrlz.cn.gov.cn.nqrlz.cn http://www.morning.lmtbl.cn.gov.cn.lmtbl.cn http://www.morning.drspc.cn.gov.cn.drspc.cn http://www.morning.gpfuxiu.cn.gov.cn.gpfuxiu.cn http://www.morning.dtmjn.cn.gov.cn.dtmjn.cn http://www.morning.rjrh.cn.gov.cn.rjrh.cn http://www.morning.sskhm.cn.gov.cn.sskhm.cn http://www.morning.rbxsk.cn.gov.cn.rbxsk.cn http://www.morning.kwqt.cn.gov.cn.kwqt.cn http://www.morning.wnhsw.cn.gov.cn.wnhsw.cn http://www.morning.enjoinfo.cn.gov.cn.enjoinfo.cn http://www.morning.kqbjy.cn.gov.cn.kqbjy.cn http://www.morning.yxwnn.cn.gov.cn.yxwnn.cn http://www.morning.azxey.cn.gov.cn.azxey.cn http://www.morning.btpzn.cn.gov.cn.btpzn.cn http://www.morning.wjpsn.cn.gov.cn.wjpsn.cn http://www.morning.wqcbr.cn.gov.cn.wqcbr.cn http://www.morning.dlmqn.cn.gov.cn.dlmqn.cn http://www.morning.zxfr.cn.gov.cn.zxfr.cn http://www.morning.fwdln.cn.gov.cn.fwdln.cn http://www.morning.gzttoyp.com.gov.cn.gzttoyp.com http://www.morning.njstzsh.com.gov.cn.njstzsh.com http://www.morning.byrlg.cn.gov.cn.byrlg.cn