Java ArrayList & LinkedList

参考:https://blog.csdn.net/weixin_42468526/article/details/81178698
https://www.cnblogs.com/softidea/p/6410680.html
https://www.cnblogs.com/wangwudi/p/11912632.html

ArrayList

ArrayList 是实现了动态数组,动态的含义就是大小可变

特性:

1、支持随机访问,查询效率高
2、增加删除需要移动元素,效率低
3、自动扩容的特点
4、支持 元素 null
5、内部没有实现同步机制,线程不安全的

1、如何增加元素

1、判断增加的位置是否合法

2、size + 1, 然后判断是否需要扩容

3、将后面元素向后移动,将增加的元素赋值给指定位置

1、如何删除元素
1、删除指定索引的元素

1、判断删除的位置是否合法

2、将元素前移动,size - 1

1、删除指定元素

1、查找该元素
如果查找失败,则返回 null
如果查找成功,则进行下步
2、按照删除指定索引的方法进行删除

3、如何扩容
  1. 默认每次会扩容 1.5 倍,可以手动调用 ensureCapacity(需要容量) 方法来实现扩容

  2. 先判断当前数组长度 和 需要容量 大小比较,如果不需要扩容,则返回。

  3. 如果需要扩容,新容量 = 当前数组长度的 1.5 倍。

    3.1 新容量 < 需要容量,说明 新容量不够,取较大者
    . 3.11如果是需要容量 < 默认初始容量,则直接取较大者 默认初始容量
    . 3.12如果是需要容量 > 默认初始容量,则直接取较大者 需要容量
    3.2 新容量 > 需要容量
    . 3.21 新容量 < 最大容量,则取较小者 新容量
    . 3.22 新容量 > 最大容量
    . . 3.221 需要容量 > 最大容量 取 Integer Max -8
    . . 3.222 需要容量 < 最大容量 取 最大容量
    在这里插入图片描述

集合的迭代器访问:
一般在遍历集合时候,如果需要操作 remove(),修改集合的长度,这时就需要使用 iterator 来遍历

参考: https://www.cnblogs.com/msymm/p/9872912.html

LinkedList

LinkedList 是一个继承了AbstractSequentialList 的双向链表
一般也用来当作堆栈、队列、双端队列来操作。

特点:

1、插入删除效率高,链式结构
2、没有实现同步机制,线程不安全的

两者如何选择:

多数情况下,当你遇到访问元素比插入或者是删除元素更加频繁的时候,你应该使用ArrayList。
另外一方面,当你在某个特别的索引中,插入或者是删除元素更加频繁,或者你压根就不需要访问元素的时候,你会选择LinkedList。
这里的主要原因是,在ArrayList中访问元素的最糟糕的时间复杂度是”1″,而在LinkedList中可能就是”n”了。在ArrayList中增加或者删除某个元素,通常会调用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值