-
ArrayList和LinkedList的共同点、区别
共同点:二者都是非线程安全的;
ArrayList:底层由数组实现,,随机访问速度较快,插入删除较快;一般用于频繁访问元素、只有在列表末尾添加和删除时使用;线程不安全;
ArrayList基于动态数组实现,为Object类型,默认初始容量为10,扩容因子为1.5,扩容机制:
扩容条件:通常,ArrayList会在元素数量达到当前容量时触发扩容操作。当元素数量等于或超过当前容量时,ArrayList就会启动扩容机制 扩容策略:ArrayList会创建一个新的更大的数组,通常情况下,新数组的容量会是当前容量的1.5倍(这个倍数可以通过ensureCapacity方法或构造函数的参数进行调整)。然后,ArrayList会将所有现有元素复制到新数组中。
线程不安全:线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。
ArrayList非线程安全原因:为什么说ArrayList是线程不安全的?_arraylist为什么不是线程安全的-CSDN博客
LinkedList:底层由双向链表实现,插入删除速度较快,但是查找的速度较慢;
ArrayList | LinkedList | |
---|---|---|
访问元素 | O(1) | O(n) |
插入/删除元素 | O(n) | O(1) |
对于随机index访问的get和set方法,一般ArrayList的速度要优于LinkedList。因为ArrayList直接通过数组下标直接找到元素;LinkedList要移动指针遍历每个元素直到找到为止。 新增和删除元素,一般LinkedList的速度要优于ArrayList。因为ArrayList在新增和删除元素时,可能扩容和复制数组;LinkedList实例化对象需要时间外,只需要修改指针即可。