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.5 倍,可以手动调用 ensureCapacity(需要容量) 方法来实现扩容
先判断当前数组长度 和 需要容量 大小比较,如果不需要扩容,则返回。
如果需要扩容,新容量 = 当前数组长度的 1.5 倍。
新容量如果小于 需要容量,则返回需要容量,
如果新容量大于 需要容量
判断新容量的 默认最大容量 大小,返回其中较小的一者
在这里插入图片描述

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

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

LinkedList

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

特点:

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

两者如何选择:

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

猜你喜欢

转载自blog.csdn.net/Misszhoudandan/article/details/109688213