Java LIst接口的实现类ArrayList与LinkedList

    技术2022-07-13  66

    ArrayList

    它是一个线性数组表,是一个大小可变的数组,在内存中分配连续的空间 优点:遍历元素和随机访问元素的效率比较高

    ArrayList常用方法

    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

    它是一个链表,采用链表的储存方式,提供从线性表两端提取、插入和删除的方法 优点:插入、删除效率比较高 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; }

    Processed: 0.013, SQL: 9