Iterator:通过指针遍历数组,默认位置在0下标前面。所以在没有获取数据之前直接调用remove会出现错误:
ArrayList<Integer> data = new ArrayList<>();
data.add(1);
data.add(3);
data.add(5);
data.add(7);
data.add(9);
Iterator<Integer> iterator = data.iterator();
iterator.remove();
直接运行:
获取到数据在remove:
Iterator<Integer> iterator = data.iterator();
iterator.next();
iterator.next();
iterator.remove();//指针移动2个位置来到1下标,remove 3
System.out.println(data);
ListIterator为Iterator的子类,拥有不仅Iterator的所有方法,也可以使用自己的方法如:previous()//返回列表中的上一个元素并向后移动光标位置。
数据还是哪些数据,代码如下:
ListIterator<Integer> iterator = data.listIterator();
Integer a = iterator.previous();
System.out.println(a);
之所以会报错是因为指针默认位置为0下标的前面,如果想要指针向上走,需要先吧指针next到下面
ListIterator<Integer> iterator = data.listIterator();
iterator.next();
iterator.next();
Integer a = iterator.previous();//光标向下移动2个位置来到下标1 ,向上移动一个位置来到下标0
System.out.println(a);//previous会返回列表中的当前元素后在向上移动指针,此时返回的数据是2坐标
运行结果
add()对于next()与previous()插入的位置区别:
①previous()
ListIterator<Integer> iterator = data.listIterator();
System.out.println(data);
iterator.next();
iterator.next();
Integer a = iterator.previous();//光标向下移动2个位置来到下标1 ,向上移动一个位置来到下标0
System.out.println("下标为2,a的数据为"+a);//previous会返回列表中的当前元素后在向上移动指针,此时返回的数据是2坐标
iterator.set(33);//set方法会替换next()或previous()返回的最后一个元素,也就是a的数据
System.out.println("previous()方法返回的数据3被替换成33");
System.out.println(data);//此时3被替换
iterator.add(111);//迭代器也可以添加数据,元素紧接在next()返回的元素右边插入(如果有),并且在previous()返回的元素左边插入 (如果有)。
System.out.println("此时指针的位置指向0,add()添加在previous()返回的元素左边");
System.out.println(data);//添加在当前指针位置的左边
运行结果
②nexe()
ListIterator<Integer> iterator = data.listIterator();
System.out.println(data);
Integer a =iterator.next();;//光标向下1个位置来到下标0
System.out.println("下标为0,a的数据为"+a);//previous会返回列表中的当前元素后在向上移动指针,此时返回的数据是2坐标
iterator.set(11);//set方法会替换next()或previous()返回的最后一个元素,也就是a的数据
System.out.println("next方法返回的数据"+a+"被替换成11");
System.out.println(data);
iterator.add(222);//迭代器也可以添加数据,元素紧接在next()返回的元素右边插入(如果有)
System.out.println("此时指针的位置指向0,add()添加在next()返回的元素右边");
System.out.println(data);//添加在当前指针位置的右边
运行结果
附上图