List的ArrayList和LinkedList

总述

ArrayList和LinkedList都是直接实现List的接口,List的特点是有序集合(有序集合的意思是可直接通过索引直接访问,Set可以自动排序,元素不可重复,如果要对自定义的Object去重,那需要重写equals和hashCode方法,详情请看我的另一个博文),元素可重复,因此ArrayList和LinkedList也继承了这个特点。ArrayList是基于基础的对象数组动态实现的数据结构,它对于随机访问(random access)get和set,速度要比LinkedList速度要快。LinkedList是基于链表的数据结构,它使用get方法时是按照顺序从列表的一段开始检查,移动指针,直到另一端,但对于添加add和删除remove操作,LinkedList速度要占优势。

附录API

ArrayList

Return method explain
boolean add(E e) 将指定的元素添加到此列表的尾部
void add(int index,E e) 在此列表中指定的位置插入指定的元素
boolean contains(Object o) 如果此列表中包含指定的元素,则返回 true
E get(int index) 返回此列表中指定位置上的元素
boolean isEmpty() 如果此列表中没有元素,则返回 true
E remove(int index) 移除此列表中指定位置上的元素
int size() 返回此列表中的元素数
Object[] toArray() 按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组
void clear() 移除此列表中的所有元素

LinkedList

Return method explain
boolean add(E e) 将指定的元素添加到此列表的尾部
void add(int index, E element) 在此列表中指定的位置插入指定的元素
void clear() 从此列表中移除所有元素
boolean contains(Object o) 如果此列表包含指定元素,则返回 true
E get(int index) 返回此列表中指定位置处的元素
E remove(int index) 移除此列表中指定位置处的元素
int size() 返回此列表的元素数
E set(int index, E element) 将此列表中指定位置的元素替换为指定的元素
Object[] toArray() 返回以适当顺序(从第一个元素到最后一个元素)包含此列表中所有元素的数组
boolean isEmpty() 如果此列表中没有元素,则返回 true

从API中看一看出:ArrayList和LinkedList方法基本相同,插入一个元素到集合中,两个集合都提供了add(int index,E element):void方法,并且LinkedList又提供set(int index,E element):E方法,它们的差别主要是效率问题,有兴趣可以自己测试一下

代码实现

ArrayList

   // 测试add方法
   List<Integer> arrayList = new ArrayList<>();
    // 添加6数据
    arrayList.add(20);
    arrayList.add(25);
    arrayList.add(8);
    arrayList.add(35);
    arrayList.add(38);
    arrayList.add(2, 100);
    for (Integer integer : arrayList) {
        System.out.print(integer + " ");
    }
    // 测试contains方法
    if (arrayList.contains(25)) {
        System.out.println("\r\ntrue");
    }
    // 测试get方法
    System.out.println(arrayList.get(2));
    // 测试isEmpty方法
    if (!arrayList.isEmpty()) {
        System.out.println("is not empty");
    }
    // 测试remove方法
    arrayList.remove(2);
    for (Integer integer : arrayList) {
        System.out.print(integer + " ");
    }
    // 测试size方法
    System.out.println("\r\n" + arrayList.size());
    // 测试toArray方法
    Object[] ig = arrayList.toArray();
    for (Object obj : ig) {
        System.out.print((Integer) obj + " ");
    }
    // 测试clear方法
    arrayList.clear();
    System.out.println("\r\n" + arrayList.size());

运行结果

20 25 100 8 35 38 
true
100
is not empty
20 25 8 35 38 
5
20 25 8 35 38 
0

LinkedList

    List<Integer> linkedList = new java.util.LinkedList<>();
    // 测试add方法
    linkedList.add(56);
    linkedList.add(78);
    linkedList.add(59);
    linkedList.add(77);
    linkedList.add(2, 100);
    for (Integer integer : linkedList) {
        System.out.print(integer + " ");
    }
    // 测试contains方法
    if (linkedList.contains(78)) {
        System.out.println("\r\ntrue");
    }
    // 测试get方法
    System.out.println(linkedList.get(1));
    // 测试remove方法
    System.out.println(linkedList.remove(2));
    // 测试size方法
    System.out.println(linkedList.size());
    // 测试set方法
    linkedList.set(2, 200);
    for (Integer integer : linkedList) {
        System.out.print(integer + " ");
    }
    // 测试isEmpty方法
    if (!linkedList.isEmpty()) {
        System.out.println("\r\ntrue");
    }
    // 测试toArray()方法
    Object obj = linkedList.toArray();
    for (Integer integer : linkedList) {
        System.out.print(integer + " ");
    }

运行结果

56 78 100 59 77 
true
78
100
4
56 78 200 77 
true
56 78 200 77 

应用场景

如果对集合的增删改的操作频繁,那就使用LinkedList,如果对集合进行频繁的随机访问,就使用ArrayList。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章