目录
集合的最大目的就是为了存取。
一、List
1.1 继承体系
List继承自Collection接口。
public interface List<E> extends Collection<E> {}
1.2 特点
1)允许包含重复元素;
2)是一个有序的集合,有索引,可以根据索引来进行取值。
1.3 特有方法
可以通过操作角标的方法对元素进行增删改等操作。
返回值类型 | 方法 | 作用 |
void | add(int index,E element) | 在列表指定的位置添加指定的元素 |
E | remove(int index) | 移除列表中指定位置的元素 |
E | set(int index,E element) | 用指定元素替换列表中指定位置的元素 |
E | get(int index) | 返回列表中指定位置的元素 |
1.4 特有的迭代器ListIterator
ListIterator迭代器是Iterator子接口。
public interface ListIterator<E> extends Iterator<E> {}
需要注意的是:通过迭代器修改元素的时候,会出现并发修改异常ConcurrentModificationException;在迭代器中,要修改元素时,只能用迭代器里的方法。
Listlterstor里的方法有:
返回值类型 | 方法 | 作用 |
void | add(E o) | 将指定元素插入列表 |
boolean | hasNext() | 以正向遍历列表时,如果列表迭代器有多个元素,则返回 true |
boolean | hasPrevious | 如果以反向遍历列表,列表迭代器有多个元素,则返回 true。 |
E | next() | 返回列表中的下一个元素。 |
int | nextIndex() | 返回对 next 的后续调用所返回元素的索引 |
E | previous | 返回列表中的前一个元素。 |
int | previousIndex() | 返回对 previous 的后续调用所返回元素的索引。 |
void | remove() | 从列表中移除由 next 或 previous 返回的最后一个元素 |
void | set(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 特有方法
返回值类型 | 方法 | 作用 |
boolean | contains(Object elem) | 如果此列表中包含指定元素,则返回true。 |
int | indexOf(Object elem) | 指定给定参数第一次出现的位置。 |
sort( ) | 对 arraylist 元素进行排序 | |
Object[ ] | toArray() | 将 arraylist 转换为数组 |
三、LinkedList
3.1 特点
1)基于链表结构实现的,所以查询速度慢,增删速度快;
2)提供了特殊方法,对头尾的元素操作(进行增删查)。
3.2 特有方法
返回值类型 | 方法 | 作用 |
void | addFirst(E o) | 元素添加到头部 |
void | addLast(E o) | 元素添加到尾部 |
E | removeFirst( ) | 删除返回第一个元素 |
E | removeLast( ) | 删除返回最后一个元素 |
E | getFirst( ) | 返回第一个元素 |
E | getLast( ) | 返回最后一个元素 |