ArrayList和LinkedList的区别是什么?
ArrayList和LinkedList的区别是什么?
-
底层的数据结构
- ArrayList底层是使用动态数组实现的
- LinkedList底层是使用双向链表实现的
-
操作数据的效率
-
ArrayList按照索引查询的时候,时间复杂度是O(1),LinkedList不支持下标查询
-
在不知道索引的情况下查询,这两个都是O(n)
-
新增和删除
- ArrayList在尾部插入或删除,时间复杂度是O(1),其他都是O(n)
- LinkedList在头尾进行操作的时候时间复杂度是O(1),其他是O(n)
-
-
内存的占用
- ArrayList底层是数组,内存连续更加节省内存
- LinkedList底层是双向链表,需要存数据和2个指针,更加占用内存
-
线程安全
-
ArrayList和LinkedList都不是线程安全的
-
解决方案
- 尽量在方法内使用,局部变量是线程安全的
- 使用线程安全的ArrayList和LinkedList
-