ArrayList和LinkedList定义在List接口下。List接口继承了Collection接口,定义了一个允许重复的有序合集。List接口增加了面向位置的操作,并且增加了一个能够双向遍历线性表迭代器。
Iterator接口的方法如下:
add():添加一个指定对象到线性表中。
hasPrevious():当往回遍历时,如果线性表遍历器还有更多的元素,则返回true
nextIndex():返回下一个元素的索引。
previous():返回该线性表遍历器的前一个元素。
previousIndex():返回前一个元素的索引。
set(element:E):使用指定的元素替换previous或next方法返回的最后一个元素。
数组线性表类ArrayList和链表类LinkedList是实现List接口的两个具体类。
ArrayList用数组存储元素,这个数组是动态创建的。如果元素的个数超过了数组容量,就创建一个更大的数组,并将当前数组中的所有元素都复制到新数组。LinkedList在一个链表中存储元素。如果需要通过下标随机访问元素,而不会在线性表其实位置插入或删除元素,则用ArrayList。否则选用LinkedList。
ArrayList的方法有:
ArrayList():用默认是初始容量创建一个空的线性表
ArrayList(c:Collection<? extends E>) :从已存在的合集中创建一个线性表
ArrayList(capactity:int):创建一个指定初始容量达到空的数组线性表
trimToSize():void 将该ArrayList实例的容量裁剪到该线性表的当前大小
LinkedList使用链表实现List接口,它还提供从线性表两端提取、插入和删除元素的方法,它的方法如下:
LinkedList():创建一个默认的空线性表
LinkedList(c:Collection<? extends E>):从已存在的合集中创建一个线性表
addFirst(element:E):void 添加元素到该线性表的头部
addLast(element:E):void添加元素到该线性表的尾部
getFirst():E 返回该线性表的第一个元素
getLast():E返回该线性表的最后一个元素
removeFirst():E从线性表中返回并删除第一个元素
removeLast():E 从线性表中返回并删除最后一个元素
package test;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
public class project1 {
public static void main(String []args) {
List<Integer> arrayList=new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(4);
arrayList.add(0, 10);
LinkedList<Object> linkedList=new LinkedList<>(arrayList);
linkedList.add(1,"red");
linkedList.removeLast();
linkedList.addFirst("black");
ListIterator<Object> listIterator=linkedList.listIterator();
while(listIterator.hasNext()) {
System.out.println(listIterator.next()+" ");
}
}
}
ArrayList获取元素的效率会高一些;若在线性表的起始位置插入和删除元素,LinkedList的效率高一些。两种线性表在中间或末尾位置上插入和删除元素方面具有同样的性能。
get(i)是一个耗时的操作,尽量不要用它遍历线性表中的所有元素,应该采用迭代器。注意foreach循环隐式的使用了迭代器。