Iterator迭代器接口

概述:

Iterator对象(代理模式)称为迭代器(设计模式的一种),主要用于遍历Collection集合中的元素

所有实现了collection接口的集合类都有一个iterator()方法,用以返回一个实现了iterator接口的对象。

iterator仅用于遍历集合,iterator本身并不提供承装对象的能力。如果需要创建iterator对象,则必须有一个被迭代的集合。

在调用it.next()方法之前必须要调用it.hasNext()进行检测如不调用,且下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常。

List额外提供了一个listiterator()方法,该方法返接口继承了iteratior回一个listiterator对象,listiterator接口继承了iterator接口,提供了专门操作list的方法

iterator和listiterator区别:

一、都有hasnext()和next都是顺序向后,但listiterator可以实现逆向(顺序向前)遍历用hasprevious()方法和previous方法。

二、listiterator可以定位当前的索引位置,nextIndex和previousIndex可以实现,iterator没有

三、listiterator有add方法,可以向list中插入对象,iterator不能。

四、都可以删除对象,但listiterator可以实现set方法修改。iterator仅能遍历不能修改(只读)

因为listiterator的这些功能,可以实现对LinkedList等list数据结构的操作。

package com.xatu.集合;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.junit.Test;

class Student {
	String name;
	int age;
}

public class LIstTest {
	@Test
	public void testArrayList() {
		List l = new ArrayList<>();
		l.add(new Integer(100));
		System.out.println("添加200结果1" + l.add(200));
		System.out.println("添加200结果2" + l.add(200));
		System.out.println("添加一个对象" + l.add(new Student()));
		l.add("aaa");
		l.add("aaa");
		l.add(0, new Student());
		l.set(1, 2000);// 替换
		System.out.println("大小" + l.size());
		System.out.println(l.indexOf("aaa"));// 5
		System.out.println(l.indexOf("aaa"));// 5
		List sl = l.subList(3, 6);
		System.out.println("sl" + sl);//
		
		for (Object object : l) {
			System.out.println(object);
		}
		System.out.println("-------------");
		// 正常循环打印
		for (int i = 0; i < l.size(); i++) {
			System.out.println(l.get(i));
		}System.out.println("迭代器");
          Iterator it = l.iterator();
          while (it.hasNext()) {
			Object object =  it.next();
			
			System.out.println(object);
			
		}
	}

 

猜你喜欢

转载自blog.csdn.net/dagedeshu/article/details/86604275