Java集合中的迭代器和列表迭代器

迭代器:迭代器是java中用来遍历集合的一种设计模式,并且需要依赖集合而存在

在Java中存在迭代器Iterator接口,由于迭代器是依赖于集合而存在的,所以我们创建迭代器的实例化对象就需要通过集合中的iterator()方法

		//创建集合对象
		ArrayList<String> list = new ArrayList<String>();
		//添加元素
		list.add("hello");
		list.add("java");
		list.add("world");
		//获取
		Iterator<String> it = list.iterator();

通过这种方法我们就可以获取到迭代器的实例化对象了,也可以理解为吧集合的元素放入到了迭代器中了

在迭代器中,是存在指针的,这个指针是用来指向数据的,该指针需先判断数据是否存在,然后再获取到这个数据
那么我们如何控制这个指针呢,迭代器中提供了两个方法供我们使用
boolean hasNext():判断是否存在下一个元素
E next():返回下一个元素,并将指针指向下一个元素
通过上面两个方法我们就可以去控制迭代器中的指针,那么我们就通过这个两个方法来遍历集合中的元素

		//创建集合对象
		ArrayList<String> list = new ArrayList<String>();
		//添加元素
		list.add("hello");
		list.add("java");
		list.add("world");
		//获取
		Iterator<String> it = list.iterator();
		//遍历集合
		//通过hasNext()方法判断是否存在下一个元素
		while(it.hasNext()) {
     
			//存在元素时,吧下一个元素返回回来并打印
			System.out.println(it.next());
		}
		//打印结果为:
		//hello
		//java
		//world

通过上述的循环就可以遍历集合中的所有元素了;

注意:如果在集合遍历过程中,使用集合的方法去增加或者删除集合中的元素,修改了集合长度,导致迭代器获取元素中判断预期修改值和实际修改值不一致,就会报出迭代器的并发修改异常;所以需要增加或者删除数据的操作,在迭代器遍历之前或者之后进行

		//创建集合对象
		ArrayList<String> list = new ArrayList<String>();
		//添加元素
		list.add("hello");
		list.add("java");
		list.add("world");
		//获取
		Iterator<String> it = list.iterator();
		//遍历集合
		//通过hasNext()方法判断是否存在下一个元素
		while(it.hasNext()) {
     
			//存在元素时,吧下一个元素返回回来并打印
			System.out.println(it.next());
			//迭代过程中使用集合的方法删除集合元素
			list.remove(1);//报出了ConcurrentModificationException异常
		}

通过上述测试,知道在迭代器遍历过程中,我们使用集合的方法去增删数据,就会报出ConcurrentModificationException并发修改异常

除了Iterator这种迭代器外,在List集合中存在另一种列表迭代器ListIterator接口,此接口是迭代器的一个子接口,该迭代器可以顺序遍历集合,也可以反序遍历集合;要获取实例化对象和迭代器一样需要依赖于集合,通过集合的listIterator()方法获取实例化对象

对于顺序遍历集合的方法和上述遍历集合的方式相同
反序遍历一样存在控制指针的方法,不过这次指针是从集合元素的最后开始向前进行判断
boolean hasPrevious():判断上一个元素是否存在
E previous():返回上一个元素,并且指针会指向上一个元素

		//创建集合对象
		List<String> list = new ArrayList<String>();
		//添加元素
		list.add("hello");
		list.add("java");
		list.add("world");
		//获取列表迭代器
		ListIterator<String> it = list.listIterator();
		//遍历集合
		//通过hasPrevious()方法判断上一个元素是否存在
		while(it.hasPrevious()) {
     
			//存在元素时,吧上一个元素返回回来并打印
			System.out.println(it.previous());
		}
		//打印结果为:
		//world
		//java
		//hello

通过上述两种方法我们就可以反序遍历List集合中的元素了

最后还有一种可以遍历集合的方式:增强for循环

		//增强for循环的格式
		//for(用于接收的数据类型 局部变量名:需要遍历的集合或数组) {
     
		//		代码块	
		//}

增强for循环底层的实现也是通过迭代器来实现,我们可以通过这种方式来对集合和数组进行遍历

1.对集合进行遍历

		//创建集合对象
		List<String> list = new ArrayList<String>();
		//添加元素
		list.add("hello");
		list.add("java");
		list.add("world");
		//通过增强for循环遍历集合
		for(String s:list) {
     
			System.out.println(s);
		}
		//打印结果:
		//hello
		//java
		//world

2.对数据进行遍历

		//创建数组
		String[] str = {
     "hello","java","world"};
		//通过增强for循环遍历数组
		for(String s:str) {
     
			System.out.println(s);
		}
		//打印结果:
		//hello
		//java
		//world

通过增强for循环我们就可以很快的遍历集合和数组的元素,由于增强for循环底层实现也是迭代器,所以使用的时候也要注意并发修改异常

今天的分享就到这里了,如果有错误的地方,欢迎大家来指点!

你可能感兴趣的:(java学习,java)