回答该题的思路:数据数据结构----->增删改查的操作区别[涉及到源码了]----->线程安全等方面------->然后回答使用时如何选择其一。
答:ArrayList:底层是由动态数组组成。LinkedList:底层是双向列表构成,每一个节点(头尾节点除外)都有指向前一个节点,和下一个节点的引用。
add方法:
正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消
先判断index是否合法,如果有index的话,然后扩容,ensureCapactiyInternal函数里就完成了一新数组大小的确定,然后将原数据Arrays.copyOf 到新数组,然后将插入的新数据放入到新数组里面。
LinkedList:现根据索引找到该索引的节点A,获取他前一个节点B,构建新的元素C,C节点的前一个节点指向B,B的下一个节点指向C,C的下一个节点指向B,B的前一个节点指向C
remove():
先找到赋值到oidValue ,然后将index后面的元素向前移动一个位置。【arrayCopy的方式】LinkedList:先通过二分法找到该节点(Node(index)方法),然后找到该节点的前一个节点A和后一个节点B,将A节点的下一个节点的引用指向B,B的前一个节点的引用指向A完成删除。
get():
ArrayList:根据数组下标直接获取
LinkedList:现根据二分法(size>>1)判断index所在的位置,然后遍历(0到index或size-1到index)找到对应的节点
contain方法
ArrayList:遍历数组,判断是否有元素等于指定的元素
LinkedList:遍历链表 找到是由有节点元素等于指定的元素
这两个都是线程不安全的,https://blog.csdn.net/liyu121/article/details/87873858