List底层实现

标题List是Collection下的子接口;

那么List有哪些特点呢?

有序,有下标,元素可以相同;

那么在List下面还有3个子接口;

  • ArrayList();
    1.底层基于数组实现,出生于JDK1.2,因为高效所以线程是不安全的;
    -在查找的情况下速度是极快的,然而在添加和删除的情况下是慢的,不如LinkedList的高效;

    -ArrayList在无参的add方法中,每次插入新的元素时,先判断是否需要扩容,判断数组是否为空,为空则建默认的容量10赋值给minCapacity,判断是否要扩容,第一次添加,数组的size是10,之后添加元素时,在ensureExplicitCapacity方法中判断数组元素个数即size+1(形参minCapacity)是否超过数组长度,超过则需要进行扩容操作,扩容是将旧的容量扩大到1.5倍,然后将数组拷贝到新的数组完成扩容操作。最后将元素添加,并size+1。ArrayList在指定位置添加元素时,是先检查指定位置是否在数组范围内,即数组中元素个数是1,则index得小于或者低于1。然后通过拷贝使数组内位置为 index 到 (size-1)的元素往后移动一位,腾出位置之后放入元素,数组个数加一。

  • LinkedList();
    1.底层基于双向链表实现,基于对头对尾操作,线程也是不安全的;
    -在查询的情况下速度是比ArrayList要慢,但是增加和删除速度快;
    在底层的实现是基于双向链表,链表里存放这有一个个的节点,一个节点分为三个部分
    1.头 :头的部分指向着上一个节点
    2.中间保存内容: 也就是add的元素
    3.尾:对应这下一个节点的头
    -------------------------------------------------------------------------
    当添加元素时,LinkedList要判断链表里是否有节点,如果没有那么就创建第一个节点,当然因为第一个节点
    1.所以头肯定是空的为null,也就是说没有指向任何
    2.中间保存着添加的元素
    3.尾部存放这当前添加的元素,等待下一个节点的指向
    --------------------------------------------------------------------------------
    那么如果当LinkedList判断结果是有节点,那么也任然要创建一个节点
    1.现在头肯定要指向上一个节点的尾
    2.中间任然保存添加的元素
    3.一样把当前添加的元素保存在尾部等待下一个节点指向

    在这里插入图片描述 在这里插入图片描述

  • Vector();
    不用 也不了解 也不BB了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值