一、List接口简介
List是有序的Collection的,此接口能够精确的控制每个元素插入的位置。用户能够根据索引(元素在List接口的中位置)访问List中的元素,类似于Java中的数组。
List接口有如下特点:
-
- 有序的集合。存储顺序和获取元素的顺序都是一致的;
- 可重复。允许存储重复的元素;
- 提供索引。提供一些索引的方法,供用户操作。
二、List类图结构
通过上面类图可用看出,List接口下有4个实现类,分别为:LinkedList、ArrayList、Vector和Stack。
三、List接口中带索引的方法(特有):
需要注意的是:操作索引时,一定要注意防止索引越界异常提示。
- IndexOutOfBoundsException:索引越界异常,集合会报;
- ArrayIndexOutOfBoundsException:数组索引越界异常;
- StringIndexOutOfBoundsException:字符串索引越界异常。
四、ArrayList
(一)、简介、继承结构
ArrayList是List接口的实现类,也是最常用的集合类。底层数据结构是一个可变的动态数组,它允许任何符合规则的元素插入(包括null)。每一个ArrayList都有一个初始容量(10),该容量代表了数组的大小。随着容器中的元素不断增加,容器的大小也会随着增加。在每次向容器中增加元素的同时都会进行容量检查,当快溢出时,就会进行扩容操作。
如果我们明确所插入元素的多少,最好指定一个初始容量值,避免过多的进行扩容操作而浪费时间、效率。
1、ArrayList继承结构
通过结构图可以看出,ArrayList继承自AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。
-
- 继承AbstractList,实现了List接口:它是一个动态数组,提供了相关添加,删除,修改和遍历等功能;
- 实现RandomAccess接口:提供随机访问的能力;RandmoAccess是Java中用来被List接口实现,为List提供快速访问功能的。在ArrayList中,可以通过元素的序号快速获取元素对象,这就是快速随机访问。
- 实现Cloneable接口:覆盖函数clone(),可以被克隆;
- 实现Serializable接口:支持序列化和反序列化,可以通过序列化传输数据。
2、ArrayList的特性:
- 增删慢,查询快(底层数据结构是数组);
- 效率高,线程不安全的(非同步);
- 擅长随机访问(实现了RandomAccess接口);
(二)、ArrayList构造方法
(三)、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 }