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

Returnmethodexplain
booleanadd(E e)将指定的元素添加到此列表的尾部
voidadd(int index,E e)在此列表中指定的位置插入指定的元素
booleancontains(Object o)如果此列表中包含指定的元素,则返回 true
Eget(int index)返回此列表中指定位置上的元素
booleanisEmpty()如果此列表中没有元素,则返回 true
Eremove(int index)移除此列表中指定位置上的元素
intsize()返回此列表中的元素数
Object[]toArray()按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组
voidclear()移除此列表中的所有元素

LinkedList

Returnmethodexplain
booleanadd(E e)将指定的元素添加到此列表的尾部
voidadd(int index, E element)在此列表中指定的位置插入指定的元素
voidclear()从此列表中移除所有元素
booleancontains(Object o)如果此列表包含指定元素,则返回 true
Eget(int index)返回此列表中指定位置处的元素
Eremove(int index)移除此列表中指定位置处的元素
intsize()返回此列表的元素数
Eset(int index, E element)将此列表中指定位置的元素替换为指定的元素
Object[]toArray()返回以适当顺序(从第一个元素到最后一个元素)包含此列表中所有元素的数组
booleanisEmpty()如果此列表中没有元素,则返回 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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值