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
推荐阅读
- Java算法及JDK源码探究|Java 递归: 八皇后问题(回溯算法)
- SSM|基于SSM的图书智能推荐销售系统
- java|Java接口的修饰符
- 软件研发|V8 是什么()
- Java|2.10 Java中Queue和Deque接口
- 从华为离职了
- Java|Java+Spring 实现任务调度Quartz框架(纯Java实现+Spring实现) 读写Excel
- Java|Centos+Docker+Halo超简单搭建博客
- Java学习笔记|Java学习笔记(2)(字符串(2)StringBuilder)