list接口是一个有序的集合,其元素以线性方式存储,集合中允许存放重复的元素
list接口继承collection接口
public interface List<E> extends Collection<E> { }
List接口下的两个实现类ArrayList,LikedList的异同电路,各有优势(应用场景):
相同点:
- 继承关系:list接口的实现类,具有list提供的所有方法
- 有序性:数据都是插入有序的;
- 重复性:元素都可以重复
- null值:都可以存储null值
- 安全性问题:都是非线程安全的
不同点:
- 数据结构:ArrayList基于数组,LinkedList基于双向链表
- 特有方法LinkedList具有特有的方法,例如addFirst(),addlist()因为实现了Deque接口
- 效率:ArrayList查询修改效率高O(1),LinkedList添加,删除效率高(先找O(n)后删O(1),ArrayList添加元素往数组尾部添加(趋近于O(1),在不扩容的情况下就是O(1)))
- 应用场景: 在查询较高的业务场景下优先考虑ArrayList,在修改。添加等操作较多的场景下优先考虑LinkedList
ArrayList:
每一个ArrayList实例都有一个默认的容量(10个),即存储元素的个数,这个容量的可以随着元素的增加而自动变大(每次是分配5原空间的1.5倍)。
ArrayList的继承关系:
属性:
构造方法:
增删查改:
增:
增加的时候就要考虑扩容问题:增长方式是1.5倍扩容
删
查、改
LinkedList:
属性:
构造函数:
增删查改:
增:
ArrayList里面有给任意位置进行插入元素,而LinkedList里面只有头插和尾插
删
查、改: