一:List学习
基本概念:
集合中的元素按索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象。
1、Iterator 迭代时候不允许做修改操作,因为list中个数遍历前已经确定。但是ListIterator 这个接口是可以允许遍历的时候去修改list。
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
for (int i = 0; i < 5; i++) {
list.add("元素" + i);
}
// Iterator<String> it = list.iterator();不允许add remove
ListIterator<String> listit = list.listIterator();
while (listit.hasNext()) {
Object obj = listit.next();
if ("元素0".equals(obj)) {
// listit.add("123");不能同时使用
listit.set("456");
}
}
System.out.println(list);
}
2、ArrayList
ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。
每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。
优势:查询速度快
3、LinkedList
LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
List list = Collections.synchronizedList(new LinkedList(...));
public class LinkListDemo {
public static void main(String[] args) {
Queue queue=new Queue();
queue.myAdd("1");
System.out.println(queue.myGet());
}
}
class Queue {
private LinkedList link;
Queue() {
link = new LinkedList();
}
public void myAdd(Object obj) {
link.addFirst(obj);
}
public Object myGet(){
return link.removeLast();
}
}
优势:增删速度快
4、Vector
优势:线程安全
劣势:查询慢 增删慢