ArrayList和LinkedList的底层源码之我见

ArrayList集合,都是基于最基本的对数组的操作.(可以说数组是它的灵魂)

修饰符transient:不被序列化

实现IO的 序列化接口

判断索引是否越界异常,

判断容量是否足够,不够就将容量做位运算右移一位(1.5倍)在判断是否足够....(即扩容算法)

通过变量modCount,多线程访问避免抛出索引越界异常而是抛出并发修改异常

增删底层就是弄一个新的数组Arrays.copyof方法存入数据返回.......

底层都是基于最原始操作进行的.

数组

数组的底层又是怎么样的?,数组的底层可以说已经是内存级别的东西了,但是它与基本数据类型有有所不同,虚拟机对他有特殊的操作.对于基本数据类型可以说已经是'元数据'级别了,

数组只是在内存开辟了一个连续的空间用来存储基本数据类型的值和引用类型的地址值.

LinkedList集合 都是基于对链表类的操作(链表类是它的灵魂)

链表类:java.util.LinkedList.Node<E>

它是LinkedList类的内部类: 

private static class Node<E> {

//三个属性
        E item;
        Node<E> next;
        Node<E> prev;
//只有一个有参构造方法
        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }

从链表类的源码可以看出,它是极其简单的一个类:包括一个满参构造和三个字段,分别是:节点元素(就是我们存储的元素对象),上一个链表类地址,下一个链表类地址.

LinkedList集合操作都是基于对这个类的基本操作.


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文子阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值