for循环、for each、迭代器都可以进行数组与集合的遍历。
三种循环的区别与关联:《关于for循环,for each和迭代器遍历集合或者数组》
for循环:可以拿到数组元素下标,可以对数组进行修改,关心越界,关心强制类型转换。
for each:不能修改元素,使用封装好的类方法。底层用迭代器实现,无法remove。
迭代器:不能修改元素,使用封装好的类方法。可以remove。
以下是ArrayList 的三种遍历循环:
//Arraylist的三种遍历循环
ArrayList<String> list = new ArrayList<>();
list.add("你好哇!");
list.add("周周哇!");
System.out.println(list); //正常打印是因为底层利用了AbstractCollection的toString方法。
一、利用 for 循环遍历循环:
//第一种:利用for循环进行遍历:
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i) + " ");
}
二、利用 for each 循环遍历循环:
//第二种:利用for each进行遍历:
for (String s : list){
System.out.println(s + " ");
}
三、利用迭代器遍历循环:继承Collection接口的都实现了迭代器方式。
Iterator<String> it1 = list.iterator();
while (it1.hasNext()){
System.out.println(it1.next() + " ");
}
System.out.println("====List迭代器相关打印=====");
ListIterator<String> it2 = list.listIterator();
while (it2.hasNext()){
System.out.println(it2.next() + " ");
}
Iterator 与 ListIterator 的区别可见该文章:《Iterator和ListIterator之间有什么区别?》
1、Iterator和ListIterator都能实现remove,remove首先需要next迭代出列表中的元素才能进行remove,但ListIterator可以通过set() 实现修改,Iterator只能遍历。
2、ListIterator中的方法更多,例如add。
3、Iterator只能单向遍历,ListIterator可以双向遍历。
其中remove与add方法示例如下:
//Iterator/ListIterator的remove
ArrayList<String> list5 = new ArrayList<>();
list5.add("鹅鹅鹅");
list5.add("曲项向天歌");
Iterator<String> it3 = list5.iterator();
while (it3.hasNext()){ //迭代器删除首先需要使用next方法迭代出集合中的元素,然后才能调用remove方法
String ret = it3.next();
if (ret.equals("鹅鹅鹅")){
it3.remove();
}else {
System.out.println(ret + " ");
}
}
System.out.println("======================");
//ListIterator的add(Iterator没有add)
ArrayList<String> list6 = new ArrayList<>();
list6.add("123");
list6.add("木头人");
ListIterator<String> it4 = list6.listIterator();
while (it4.hasNext()){
String ret = it4.next();
if (ret.equals("123")){
it4.add("那么就");
}else{
System.out.println(ret + " ");
}
}
System.out.println(list6);