ArrayList 与 LinkedList 区别

ArrayList 与 LinkedList 区别

共同点
• 都是 AbstractList 的子类
• 都实现了 Cloneable 跟 Serializable 接口 代表 可以使用克隆以及序列化
• 都保证了数据的顺序读写
• 都可以存Null值 / 重复的数据
• 都是通过索引获取元素
• 都是线程不安全的集合 都可以通过 Collections.synchronizedList(List?) 创建一个线程安全的集合
不同点
• ArrayList
• 实现了 RandomAccess 接口 提供了快速定位资源位置的功能 (其实也就是 使用for循环效率高 )
• size() | isEmpty() | get() | set() | iterator() | 时间复杂度为O (1)
• add 添加操作时间复杂度平均为 O(n)
• 占用空间小 不需要额外空间维护链表结构
• 适合 根据索引查询多的场景
• LinkedList
• 实现了Queue | Deque 接口 可以当做双向队列,栈来使用
• 头尾添加数据时间复杂度为 O(1) 其他位置插入复杂度为O(n)
• 获取头尾数据时间复杂度为O(1) 其他位置最差时间复杂度为O(n)
• 删除数据时间复杂度为O(1)
• 需要额外空间维护链表结构 以保证顺序读写的正确性
• 适合做 删除操作多的场景

你可能感兴趣的:(java,链表,数据结构,java)