它是一个线性数组表,是一个大小可变的数组,在内存中分配连续的空间 优点:遍历元素和随机访问元素的效率比较高
public void add(int index,E element) 在指定位置添加元素
public boolean addAll(int index,Collection<? extends E> c) 在指定位置添加一组元素
E get(int index) 返回指定位置元素
E set(int index,E element) 替换指定位置元素
public int indexOf(Object o) 查找指定元素位置
public int lastIndexOf(Object o) 从后往前查找指定元素位置
public ListIterator listiterator() 获得List迭代器对象
public E remove(int index) 删除指定位置的元素
public List subList(int fromIndex,int toIndex) 取出集合中的子集合
它是一个链表,采用链表的储存方式,提供从线性表两端提取、插入和删除的方法 优点:插入、删除效率比较高 LinkedList的的方法与ArrayList几乎相同,那么怎么体现它们之间的区别呢 举个栗子: 假设我们分别用两种方法拼接150000个对象
public static long costTime(List<Object> list) { Object obj=new Object(); long startTime=System.currentTimeMillis(); for(int i=0;i<150000;i++) { list.add(obj); } long endTime=System.currentTimeMillis(); return endTime-startTime; } System.out.println("ArrayList用时:"+costTime(new ArrayList<>())); System.out.println("LinkedList用时:"+costTime(new LinkedList<>()));可以看到两种方法耗时相似 那么如果每次都在第一个地方插入元素呢
public static long costTime(List<Object> list) { Object obj=new Object(); long startTime=System.currentTimeMillis(); for(int i=0;i<150000;i++) { list.add(0,obj); } long endTime=System.currentTimeMillis(); return endTime-startTime; }