韩顺平java510-515要点笔记

510

1.如何排查异常

先写出对的,再进行取反。

2.Arraylist使用事项

可以放空元素,并且可以加多个

底层是用数组实现的

解读源码

ArrayList基本等同vector,但是线程不安全,但是快

Synchronize做线程互斥的

3.ArrayList的扩容机制

先说结论,再分析源码

Debug 画图

有些难度

(1)维护数组

数据最终存在elementdata

属于Object的数组elementdata

(2)当创建ArrayList对象

构造器

传进去一个整数

则初始化 刚开始是0,空间为0

(就是总会有冗余)

transient 表示瞬间的;短暂的 ;表示属性不会被序列化

510Arraylist底层执行机制

步骤:(抑制警告

解读源码

无参构造器创建ArrayList对象

for循环,添加1-10个数据

构造器是什么运行的

执行的是

默认的elementdata是什么样子

第一次初始化就是一个空数组

第一次添加会进行装箱

先进到integer

再进入到add方法(确认capacity容量如何)

执行添加的一个方法

不是直接上来就添加

因为可能内存不够

确认大小

是不是够我添加一个数据

先确定是否要扩容

然后第二步才会把

还要确定要不要真正要扩容

modCount++记录集合被修改的次数

每一次添加都要去瞅一眼

第一次进来,0+0还是0

第一次不是用扩容

先把其大小赋值

按照1.5倍来扩容

第一次很遗憾,不扩容

第二次再扩

Huge

Arrays.copyOf

默认还是空)

//默认情况下,debug显示的数据是简化后的

如果希望看到完整的,需要做设置

不然看到的是被阉割的数据

可以看出扩容并不是随便扩容的

编写程序时的快捷方法也是人的逻辑实现的

都是人写的为了让后来者更加方便

511底层源码2

构造器 initialcapacity

分析有参构造

创建了指定大小的elementdata数组

512 vector

最大特点:线程安全

synchronize使线程同步

(同时操作)

513 vector底层源码

扩容机制

514linkedlist底层结构

链表和队列

添加和删除效率比较高,涉及到扩容,不是通过数组来实现

简单的双向链表

“岁月如鎏金般闪烁”

515linkedlist源码分析

crud增删改查

为什么要看源码,是他的底层实现逻辑与方法

Remove(指定删除位置)

默认删除的是第一个linkedlist.remove( )

//first = next

        最后,想谈谈我目前对源码的认识,为什么老韩一直告诫我们要去看源码,因为你只有看源码才可能会明白底层,不光知道这个方法具体是做什么的,能够实现什么效果,我们还要了解其具体是怎么实现,因为底层的方法也是前人写的,他们的方法、接口,之后添加到了编译器中,代表了这个方法的常用性,并且为什么这个写法,肯定也是经历了无数次的检验。

        那么我们能够去看一些好的代码书写思路,并且弄明白其具体是怎么实现的,必然会大大提高我们的水平,这就证明了为什么老韩说:“想拿高薪,就要看源码。”因为你只有懂得了底层运行机制,你才能理解的相当透彻,用起来得心应手,并且继承前人的优质思想不断向后推进。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值