说一下ArrayList和LinkedList的区别
1、首先,他们的底层实现数据结构的不同,ArrayList底层是基于数组的,LinkedList的底层是基于链表实现的
2、. 由于底层数据结构的不同。他们所适用的场景也不一样,ArrayList由于基于数组实现的更适合随机查找,LinkedList由于基于链表实现的更适合于添加和删除,他们二者是查询。添加。删除的时间复杂度也不一样
操作 | ArrayList | LinkedList |
---|---|---|
读取get() | 根据下标直接查询,复杂度为O(1 | 遍历获取,复杂度O(n) |
添加add(E) | 直接尾部添加,复杂度O(1) | 直接尾部添加,复杂度O(1) |
指定位置添加add(index ,E) | 查询后添加,插入位置后面的元素向后移动一个单位,复杂度O(n) | 查询后,指针指向操作,复杂度O(n) |
删除remove(E) | 删除指定元素,后面的元素需要逐个移动,复杂度O(n) | 直接指针操作,复杂度O(1) |
3、另外ArrayList和LinkedList都实现了List接口,但是LinkedList还额外实现了Deque接口,所以LinkedList还可以当作队列来使用。