java集合框架总结(二)

linkedList相对于ArrayList拥有更加丰富的方法实现,需要的时候可以直接查询api文档,这里就不列出。
关于Vector:

1、Vector也是List接口的一个子类实现 2、Vector和ArrayList一样,底层都是使用数组进行实现 3、面试经常问两者的区别 (1)ArrayList是线程不安全的,效率高,Vector是线程安全的,但是效率较低 (2)ArrayList在进行扩容的时候,是扩容1.5倍,Vector扩容的时候,是扩容2倍

接下来讲一下关于List中的迭代器Iterator:
在java代码中包含3种循环方式

do。。。while
while
for 还有一种增强for循环的方式,可以简化循环的编写**
关于Iterable
所有实现了Collection接口的容器类都有一个iterator() 方法用以返回另一个实现了Iterator接口的对象,Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。
1、所有的集合类都默认实现了Iterable的接口(通过内部类来实现调用),实现此接口意味着具备了增强for循环的能力,也就是for-each,所有的集合类均没有提供相应的遍历方法,而是把遍历交给迭代器完成。迭代器为集合而生,与门实现集合遍历 2、增强for循环本质上使用的也是iterator功能,此接口意味着具备了增强for循环的能力,也就是for-each。 3、Iterator是迭代器设计模式的具体实现。 4、Iterator方法 – boolean hasNext():判断是否存在另一个可访问的元素 – Object next():返回要访问的下一个元素 – void remove():删除上次访问返回的对象

? 可以使用Iterator遍历的本质是什么?
– 实现Iterable接口
For each:
For-each循环 –增强的for循环,遍历array或Collection的时候相当简便 –无需获得集合和数组的长度,无需使用索引访问元素,无需循环条件 –遍历集合时底层调用Iterator完成操作 ?For-each缺陷 –数组: ?丌能方便的访问下标值 ?丌要在for-each中尝试对变量赋值,只是一个临时变量 –集合: ?不使用Iterator相比,丌能方便 的删除集合中的内容 ?For-each总结

–除了简单的遍历并读出其中的内容外,丌建议使用增强for
ListIterator的作用:解决并发操作异常
在使用iterator进行迭代的过程中如果删除其中的某个元素会报错,并发操作异常,因此如果遍历的同时需要修改元素,建议使用ListIterator
【java集合框架总结(二)】在迭代时,不可能通过集合对象的方法(al.add(?))操作集合中的元素,会发生并发修改异常。所以,在迭代时只能通过迭代器的方法操作元素,但是Iterator的方法是有限的,只能进行判断(hasNext),取出(next),删除(remove)的操作, 如果想要在迭代的过程中进行向集合中添加,修改元素等就需要使用ListIterator接口中的方法。
ListIterator迭代器提供了向前和向后两种遍历方式。 始终是通过corsor和lastret的指针来获取元素值及向下的遍历索引。 当使用向前遍历的时候必须要保证指针在迭代器的结尾,否则无法获取值。

public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(1); list.add(2); list.add(3); list.add(4); int i1 = 0; for(int i = 0; i

    推荐阅读