Iterator和ListIterator
在上两篇文章中,我们介绍了ArrayList和LinkedList
ArrayList是基于数组的数据结构,增删改查都依赖Index去完成。因此修改和查看效率高,增删涉及到数组的扩容,因此效率较低。
LinkedList是基于双向链表的数据结构,增删特别快,但改和查每次都需要遍历整个链表,因此效率低。
ArrayList的遍历
package com.evan.array_list;
import java.util.ArrayList;
public class Demo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六");
for (int i = 0; i < list.size(); i++) {
String value = list.get(i);
System.out.println("value at " + i + " is :" + value);
}
}
}
这篇文章我们介绍另外一种遍历方式,就是迭代器。
Iterator
package com.evan.array_list;
import java.util.ArrayList;
import java.util.Iterator;
public class Demo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六");
// for (int i = 0; i < list.size(); i++) {
// String value = list.get(i);
// System.out.println("value at " + i + " is :" + value);
// }
for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); ) {
String value = iterator.next();
System.out.println("value is :" + value);
}
}
}
Iterator常用方法:
- hasNext() 是否有下一个元素
- next() 获取下一个元素
- remove() 删除当前元素
Iterator可以作用于List、Set和Map集合上,可以用来获取元素以及删除元素,在LinkedList和Set中,只可以用Iterator进行遍历
在List的体系下,还有一种特有的迭代器 ListIterator
ListIterator相对于Iterator,还含有特有的函数
- hasNext() 是否有下一个元素
- hasPreview() 是否有上一个元素
- next() 获取下一个元素
- preview() 获取上一个元素
- add() 增加元素
- set() 重置元素
- remove() 删除元素
- nextIndex() 下一个标记
- previewIndex() 上一个标记