#JAVA笔记LinkedListz在jdk8中的源码解析:

LinkedListz在jdk8中的源码解析:

LinkedList list= new LinkedList<>();//底层也没做啥

list.add(“AA”);将"AA"封装到一个Node对象1中,list对象的属性first,las都指向此Node对象1。

list.add("BB"); //将"BB"封装到一个Node对象2中,对象1和对象2构成一个双向链表,同时last指向此Node对象2
...
因为LinkedList使用的是双向链表,不需要考虑扩容问题。

LinkedList内部声明:

transient int size = 0;//长度

/**
 * Pointer to first node.
 */
transient Node<E> first;//定义的头部节点

/**
 * Pointer to last node.
 */
transient Node<E> last;//定义的尾部节点

private static class Node{

​ E item;

​ Node next;

​ Node prev;

}

3.LinkedList是否存在扩容问题?NO!

四,启示与开发建议

1.Vector基本不使用了

2.ArrayList底层使用数组结构,查找与添加(尾部添加)操作效率高,时间复杂度为O(1)

​ 删除和插入操作效率低,时间复杂度为O(1)

LinkedList底层使用双向链表结构,删除和插入操作效率高,时间复杂度为O(1)

​ 查找与添加(尾部添加)操作效率高,时间复杂度为O(n)(有可能添加操作时O(1))

  1. 在选择了ArrayList的前提下,new ArrayList():底层创建长度为10的数组

    ​ new ArrayList(int capacity):底层创建指定capacity长度的数组。

    如果开发中,大体确认数组的长度,则推荐使用ArrayList(int capacity)这个构造器,避免了数组扩容的问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值