一、List接口简介

List是有序的Collection的,此接口能够精确的控制每个元素插入的位置。用户能够根据索引(元素在List接口的中位置)访问List中的元素,类似于Java中的数组。

List接口有如下特点:

    • 有序的集合。存储顺序和获取元素的顺序都是一致的;
    • 可重复。允许存储重复的元素;
    • 提供索引。提供一些索引的方法,供用户操作。

二、List类图结构

Java中的集合(五)继承Collection的List接口

 通过上面类图可用看出,List接口下有4个实现类,分别为:LinkedList、ArrayList、Vector和Stack

Java中的集合(五)继承Collection的List接口

三、List接口中带索引的方法(特有):

Java中的集合(五)继承Collection的List接口

 

 需要注意的是:操作索引时,一定要注意防止索引越界异常提示。

  • IndexOutOfBoundsException:索引越界异常,集合会报;
  • ArrayIndexOutOfBoundsException:数组索引越界异常;
  • StringIndexOutOfBoundsException:字符串索引越界异常。

四、ArrayList

(一)、简介、继承结构

ArrayList是List接口的实现类,也是最常用的集合类。底层数据结构是一个可变的动态数组,它允许任何符合规则的元素插入(包括null)。每一个ArrayList都有一个初始容量(10),该容量代表了数组的大小。随着容器中的元素不断增加,容器的大小也会随着增加。在每次向容器中增加元素的同时都会进行容量检查,当快溢出时,就会进行扩容操作。

如果我们明确所插入元素的多少,最好指定一个初始容量值,避免过多的进行扩容操作而浪费时间、效率。

1、ArrayList继承结构

Java中的集合(五)继承Collection的List接口

 

通过结构图可以看出,ArrayList继承自AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。

    • 继承AbstractList,实现了List接口:它是一个动态数组,提供了相关添加,删除,修改和遍历等功能;
    • 实现RandomAccess接口:提供随机访问的能力;RandmoAccess是Java中用来被List接口实现,为List提供快速访问功能的。在ArrayList中,可以通过元素的序号快速获取元素对象,这就是快速随机访问。
    • 实现Cloneable接口:覆盖函数clone(),可以被克隆;
    • 实现Serializable接口:支持序列化和反序列化,可以通过序列化传输数据。

2、ArrayList的特性:

  • 增删慢,查询快(底层数据结构是数组);
  • 效率高,线程不安全的(非同步);
  • 擅长随机访问(实现了RandomAccess接口);

(二)、ArrayList构造方法

Java中的集合(五)继承Collection的List接口

(三)、ArrayList的两个重要的属性:elementData 和 size

1、elementData:Object[]的数组,保存了添加到ArrayList中的元素。

  • 通过ArrayList()初始化ArrayList时,elementData的大小为默认值10,即Object[10];
  • 通过ArrayList(int initialCapacity)初始化ArrayList时,elementData的大小为指定值initialCapacity,即Object[initialCapacity];
  • ArrayList(Collection<? extends E> c)初始化ArrayList时,elementData的大小为参数集合的大小,即Object[c.length];

2、size:动态数组的实际大小

(四)、ArrayList的遍历方式

1、Iterator迭代器遍历方式

ArrayList类中封装了Iterator接口,调用Iterator()方法获得Iterator对象,Iterator对象调用hashNext()、next()方法进行迭代遍历。

1 Integer value = null;
2 Iterator iter = list.iterator();
3 while (iter.hasNext()) {
4     value = (Integer)iter.next();
5 }
View Code

相关文章: