15--API-ArrayList--LinkedList

ArrayList(实现类)

概述:

  1. 存在于java.util包中。
    
  2. 内部用数组存放数据,封装了数组的操作,每个对象都有下标。
    
  3. 内部数组默认初始容量是10。如果不够会以1.5倍容量增长。
    
  4. 查询快,增删数据效率会降低。
    

特点:

  • 是list接口的实现类, 拥有list接口的特点, 有序, 有索引, 底层使用数组实现, 方便查询
  • 可以使用Collection抽象类和List接口的通用方法

常用构造方法

方法 说明
ArrayList() 无参构造

常用特有方法

注意: remove() 可以按照下标删除, 也可以直接指定元素值, 如果元素是Integer类型, 哪么可能会出现意外的结果

如下实例:

// 创建ArrayList对象
List<Integer> a1 = new ArrayList<>();
a1.add(1);
a1.add(2);
a1.add(3);
a1.add(4);
a1.add(100);

// remove() 可以按照下标删除, 也可以直接指定元素值
System.out.println(a1.remove(2)); // 按照下标删除
System.out.println(a1.remove(Integer.valueOf(100))); // 按照元素进行删除

由上例可见: 直接传入数字会默认按照下标进行删除, 只有传入包装类型的时候才会按元素删除

LinkedList(实现类)

概述:

双向链表,两端效率高。底层就是数组和链表实现的。

特点:

  • List接口的实现类, 拥有List接口的特点, 可以重复, 有索引, 有序, 底层是一个链表结构的实现. 查询比ArrayList复杂, 但是适用于增删业务
  • 可以使用Collection抽象类和List接口的通用方法
  • 双向链表:下标遍历效率低,迭代器遍历效率高

常用构造方法

方法 说明
LinkedList() 无参构造

常用特有方法

返回值 方法 说明
void addFirst(E e) 添加首元素
void addLast(E e) 添加尾元素
E getFirst() 获取首 元素
E getLash() 获取尾元素
E removeFirst() 移除首元素, 并返回被移除元素的值
E removeLash() 移除尾元素, 并返回被移除元素的值

测试案例:

双向链表:下标遍历效率低,迭代器遍历效率高

public class Test1_ArrayList {

       public static void main(String[] args) throws Exception {
              LinkedList ll = new LinkedList ();
              for (int i = 0; i < 100000; i++) {
                     ll.add(100);
              }
              f1(ll);
              f2(ll);
       }
       private static void f2(LinkedList<Integer> ll) {
              long t = System.currentTimeMillis();
              Iterator it = ll.iterator();
              while(it.hasNext()) {
                     it.next();
              }
              t = System.currentTimeMillis()-t;
              System.out.println("=====iterator========="+t);//16
       }
       private static void f1(LinkedList<Integer> ll) {
              long t = System.currentTimeMillis();
              for (int i = 0; i < ll.size(); i++) {
                     ll.get(i);
              }
              long t1 = System.currentTimeMillis();
              System.out.println("~~~~for~~~~~~~"+(t1-t));//9078
       }
}

posted on 2020-05-21 15:18  liqiangbk  阅读(132)  评论(0编辑  收藏  举报

导航