迭代器Iteartor接口中,有以下3个方法:
1.hasNext() 该方法检查序列中是否还有元素。
2.next() 获取迭代过的一个元素。
3.remove() 移除迭代器返回的最后一个元素(将迭代器新近返回的元素删除)。
只有当next执行完后,才能调用remove函数。
1.比如你要删除第一个元素,不能直接调用remove(),而要先next一下;
2.在没有先调用next()就调用remove()是会抛出异常的。
迭代器主要的用法是:首先用hasNext()作为循环条件,再用next()方法得到每一个元素,最后在进行相关的操作。
注意一点:
迭代出来的元素都是原来集合元素的拷贝。
Java集合中保存的元素实质是对象的引用,而非对象本身。
public class DieDaiQi {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
//创建容器的迭代器,这个迭代器只可以给list使用
Iterator<String> iterator=list.iterator();
while(iterator.hasNext()){ //判断iterator是否还有元素
//将迭代器的下标移动一位,并得到当前位置的元素值
System.out.println(iterator.next());
}
}
}
使用for循环还是迭代器Iterator对比:
采用ArrayList对随机访问比较快,而for循环中的get()方法,采用的即是随机访问的方法,因此在ArrayList里,for循环较快。
采用LinkedList则是顺序访问比较快,iterator中的next()方法,采用的即是顺序访问的方法,因此在LinkedList里,使用iterator较快。
从数据结构角度分析,for循环适合访问顺序结构,可以根据下标快速获取指定元素.而Iterator 适合访问链式结构。
使用 Iterator 的好处在于可以使用相同方式去遍历集合中元素,而不用考虑集合类的内部实现(只要它实现了 java.lang.Iterable 接口),
如果使用 Iterator 来遍历集合中元素,一旦不再使用 List 转而使用 Set 来组织数据,那遍历元素的代码不用做任何修改,如果使用 for 来遍历,那所有遍历此集合的算法都得做相应调整,因为List有序,Set无序,结构不同,他们的访问算法也不一样.(还是说明了一点遍历和集合本身分离了)