List集合的特点:
有序(存储和取出的元素一致),可重复的。通过源码可发现,添加元素返回值始终为true
List集合的特有功能:
1.添加功能
void add(int index,Object element):在指定位置添加元素
2.获取功能
Object get(int index):获取指定位置的元素
3.列表迭代器
ListIterator listIterator():List集合特有的迭代器。
该迭代器继承了Iterator迭代器,所以,就可以直接使用hasNext()和next()方法。
特有功能:
Object previous():获取上一个元素
boolean hasPrevious():判断是否有元素
注意:ListIterator 可以实现逆向遍历,但是必须先正向遍历,才能逆向遍历,所以一般无意义,不使用。
4.删除功能
Object remove(int index):根据索引删除元素,返回被删除的元素
5.修改功能
Object set(int index,Object element):根据索引修改元素,返回被修改的元素
List集合特有的遍历功能:
通过for循环 ,size()方法,以及get() 方法。
ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
产生原因:
迭代器是依赖于集合而存在的,在判断成功后,集合中新添加了元素,而迭代器不知道,所以报错,这个错误叫并发修改异常。
其实这个问题描述的是:迭代器遍历元素的时候,通过集合是不能修改元素的。
如何解决?
A: 迭代器迭代元素,迭代器修改元素
而Iterator迭代器没有添加功能,所以使用其子接口ListIterator。添加的元素是跟在当前迭代的元素后
B:集合遍历元素,集合修改元素(普通for)
通过for循环遍历元素,然后添加元素。
数据结构:数据的组织方式。
面试题:常见的数据结构的优缺点。(自己找答案)
常见的数据结构:
List集合的子类特点:
面试题:
ArrayList:底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector:底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
LinkedList:底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
到底使用谁呢?看需求?
分析:
要安全吗?
要:Vector(即使要,也不使用这个,后面再说)
不要:ArrayList或者LinkedList
查询多;ArrayList
增删多:LinkedList
什么都不知道,就用ArrayList。