import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/**
* ctrl + alt + m 可以抽取一段代码为一个方法
* 迭代器和增强for循环的使用
* 只有单列集合Collection才能使用迭代器,因为其继承了 Iterator
* 双列集合为 Map类型的集合,可以简单理解为有键值对出现的集合 Map<key,value>
* 三种循环的使用场景:
* 1、需要操作索引,使用普通for循环
* 2、在遍历过程中需要删除元素,使用迭代器
* 3、仅仅是遍历元素,使用增强for循环
*/
public class UseIterator {
public static void main(String[] args) {
Collection list = getCollection();
ArrayList list2 = (ArrayList) getCollection();
method1(list);
method2(list);
method3(list2);
}
private static Collection getCollection() {
//这里注意Collection是接口,不能直接new,需要用其实现类
Collection list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("bbb");
list.add("ccc");
list.add("ccc");
list.add("ddd");
return list;
}
private static void method1(Collection list) {
/**快捷生成方式 增强for循环: list.for 回车即可
* 数据类型一定是集合或者数组中元素的类型
* obj为循环中的变量名
* list未要遍历的目标数组或目标集合
*/
for (Object obj:list) {
//修改第三方变量的值,不会影响原集合中的元素
obj = "qq";
System.out.println(obj);
}
System.out.println(list);
System.out.println("==============");
}
private static void method2(Collection list) {
//迭代器遍历Collection集合里的元素
//创建迭代器,默认指向 0 索引
Iterator it = list.iterator();
//使用 hasNext 判断集合中当前位置是否有元素可以取出;
while (it.hasNext()){
//用 next 取出当前位置的元素、并将迭代器对象移向下一个索引位置(即往后移动到下一个下标)
Object element = it.next();
System.out.println(element);
//删除集合中的指定元素
if ("bbb".equals(element)){
//remove方法:下标指到谁就删除谁
it.remove();
}
}
System.out.println(list);
System.out.println("==============");
}
private static void method3(ArrayList list2) {
for (int i = 0; i < list2.size(); i++) {
Object obj = list2.get(i);
if ("ccc".equals(obj)){
list2.remove(i);
//这里需要i--,是因为集合的大小是动态的,当删除掉前面一个元素后,后面的元素会整体往前移动一位,
//即后一位元素的下标会往前移动一位,
//如果删除后不加 i-- ,则普通for循环会因为条件中 i++ 的原因把下标继续往后移动一位后,从而导致符合条件的重复元素没删除
i--;
}
}
System.out.println(list2);
System.out.println("==============");
}
}