Java集合中的List、ArrayList、LinkedList

本文详细介绍了Java集合框架中的List接口,包括其继承体系、特点和特有方法。ArrayList和LinkedList作为List的实现,分别以数组和链表为基础,具有不同的性能特征。ArrayList适合快速索引访问,而LinkedList擅长增删操作。同时,文章还探讨了ListIterator迭代器的使用及其方法。
摘要由CSDN通过智能技术生成

目录

一、List

1.1 继承体系        

1.2 特点 

1.3 特有方法

1.4 特有的迭代器ListIterator

二、ArrayList 

2.1 继承体系        

2.2 特点 

2.3 源码解析

2.4 特有方法 

三、LinkedList

3.1 特点

3.2 特有方法


集合的最大目的就是为了存取。

一、List

1.1 继承体系        

        List继承自Collection接口。

public interface List<E> extends Collection<E> {}

1.2 特点 

        1)允许包含重复元素;

        2)是一个有序的集合,有索引,可以根据索引来进行取值。

1.3 特有方法

        可以通过操作角标的方法对元素进行增删改等操作。

返回值类型方法作用
voidadd(int index,E element)在列表指定的位置添加指定的元素
E

remove(int index)

移除列表中指定位置的元素
Eset(int index,E element)用指定元素替换列表中指定位置的元素
Eget(int index)返回列表中指定位置的元素

1.4 特有的迭代器ListIterator

        ListIterator迭代器是Iterator子接口。

public interface ListIterator<E> extends Iterator<E> {}

需要注意的是:通过迭代器修改元素的时候,会出现并发修改异常ConcurrentModificationException;在迭代器中,要修改元素时,只能用迭代器里的方法。

Listlterstor里的方法有:

返回值类型方法作用
voidadd(E o)将指定元素插入列表
booleanhasNext()以正向遍历列表时,如果列表迭代器有多个元素,则返回 true
booleanhasPrevious如果以反向遍历列表,列表迭代器有多个元素,则返回 true。
Enext()返回列表中的下一个元素。
intnextIndex()返回对 next 的后续调用所返回元素的索引
Eprevious返回列表中的前一个元素。
intpreviousIndex()返回对 previous 的后续调用所返回元素的索引。
voidremove()从列表中移除由 next 或 previous 返回的最后一个元素
voidset(E o)用指定元素替换 next 或 previous 返回的最后一个元素

二、ArrayList 

2.1 继承体系        

  ArrayList <E>继承自AbstractList<E>类,实现了List<E>接口。

public class ArrayList<E> extends AbstractList<E> implements List<E>{}

2.2 特点 

        1)随着向 ArrayList 中不断添加元素,其容量也自动增长

        2)底层是使用数组实现,索引查询速度快,增删速度慢。

2.3 源码解析

public class ArrayList<E> extends AbstractList<E> implements List<E>{
    private static final int DEFAULT_CAPACITY = 10;  //设置默认容量为10
    private static final Object[] EMPTY_ELEMENTDATA = {}; 
    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
    transient Object[] elementData;
   
    private int size;  //列表中的元素数

    //构造一个容量为initialCapacity的列表
    public ArrayList(int initialCapacity) {  
        if (initialCapacity > 0) {   //若定义的容量大于0,就创建一个容量为initialCapacity的object数组
            this.elementData = new Object[initialCapacity];  
        } else if (initialCapacity == 0) {  //若定义的容量等于于0,替代空的数组
            this.elementData = EMPTY_ELEMENTDATA;
        } else { 
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        }
    }
    
    //构造容量为10的列表
    public ArrayList() {
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }

    //构造一个包含指定 collection 的元素的列表
    public ArrayList(Collection<? extends E> c) {
        elementData = c.toArray();
        if ((size = elementData.length) != 0) {
            // c.toArray可能错误的或者不返回Object[]
            if (elementData.getClass() != Object[].class)
                elementData = Arrays.copyOf(elementData, size, Object[].class);
        } else {
            //替代空的数组
            this.elementData = EMPTY_ELEMENTDATA;
        }
    }

}

2.4 特有方法 

返回值类型方法作用
booleancontains(Object elem)如果此列表中包含指定元素,则返回true。
intindexOf(Object elem)指定给定参数第一次出现的位置。
sort( )对 arraylist 元素进行排序
Object[ ]toArray()将 arraylist 转换为数组

三、LinkedList

3.1 特点

        1)基于链表结构实现的,所以查询速度慢,增删速度快;

        2)提供了特殊方法,对头尾的元素操作(进行增删查)。

3.2 特有方法

返回值类型方法作用
voidaddFirst(E o)元素添加到头部
voidaddLast(E o)元素添加到尾部
EremoveFirst( )删除返回第一个元素
EremoveLast( )删除返回最后一个元素
EgetFirst( )返回第一个元素
EgetLast( )返回最后一个元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值