List特点:
有序可重复;
特有功能:
A:添加功能:
void add(int index, object element);在指定位置添加元素;
B:获取功能:
Object get(int index);获取指定位置的元素;
C:列表迭代器
ListIterator listIterator();List集合特有的迭代器.
这个迭代器多了一对hasprevious();和previous();方法,用来逆向遍历集合.
注意:逆向遍历必须使用在正向遍历之后,否则没有数据.
D:删除功能:
E remove(int index);根据索引删除元素;
E:修改功能
E set(int index, E element);根据索引修改元素,返回被修改的元素.
注意一个报错:"ConcurrentModificationException":当方法检测到对象的并发修改,但是不允 许这种修改时,抛出异常.
产生原因:
迭代器是依赖于集合而存在的,在判断成功后,集合中新添加了元素,而迭代器 却不知道,所以就报错,这个错叫并发修改异常.
其实这个问题描述的是:迭代器遍历元素的时候,通过集合是不能修改元素的.
解决办法:
A:迭代器迭代元素,迭代器修改元素.ListIterator有添加功能.添加的元素是跟在 刚才迭代的元素后面的.
B:用普通的for循环遍历,用集合改变集合.
添加的元素在最后添加.
List的子类:ArrayList,Vector,LinkedList
ArrayList:
底层数据结构是数组,查询快,增删慢.
线程不安全,效率高.
Vector:
底层数据结构是数组,查询快,增删慢.
线程安全,效率低.
Vector的特有功能:
1.添加功能:
public void addElement(Object obj); 相当于添加功能add();
2.获取功能:
public Object elementAt(int index); 相当于get();功能
public Enumeration elements();相当于next();
这里的Enumeration 就相当于Iterator,它也有自己的hasMoreElements();和 nextElement();方法.
JDK升级的原因:
A:更安全;B:更效率;C:简化书写;
LinkedList:
底层数据结构是链表,查询慢,增删快.
线程不安全,效率高.
LinkedList特有功能:
添加功能:
public void addFirst(Object e);添加元素到首位置.
public void addLast(Object e);添加元素到末尾.
获取功能:
public Object getFirst();
public Object getLast();
删除功能:
public Object removeFirst();返回的是删除的那个元素;
public Object removeLast();返回的是删除的那个元素;
因需求而定,选用哪个集合.ArrayList最常用.