淘先锋技术网

首页 1 2 3 4 5 6 7
集合输出一共有四种手段:Iterator、ListIterator、Enumeration、foreach
1.迭代输出:Iterator
只要是Collection接口的子类对象,一定有一个iterator()取得Iterator对象,用于集合输出。
在Iterator接口里有三个抽象方法:
(1)判断是否有下一个元素:public boolean hasNext();
(2)取得当前元素:public E next();
(3)删除元素:public default void remove();

如:Iterator使用

public class Test{
	public static void main(String[] args) {
		List<String> list = new ArrayList<>();
		list.add("A");
		list.add("A");
		list.add("B");
		list.add("C");
		Iterator<String> iterator = list.iterator();
		while(iterator.hasNext()) {
			String string = iterator.next();
			System.out.println(string);
		}
	}
}

如:删除元素

public class Test{
	public static void main(String[] args) {
		List<String> list = new ArrayList<>();
		list.add("A");
		list.add("A");
		list.add("B");
		list.add("C");
		Iterator<String> iterator = list.iterator();
		while(iterator.hasNext()) {
			String string = iterator.next();
			if(string.equals("A")) {
				//使用集合提供的remove()方法,则会产生ConcurrentModificationException
//				list.remove("A");
				//使用iterator的remove方法则不会产生异常
				iterator.remove();
				continue;
			}
			System.out.println(string);
		}
	}
}
如果在集合遍历的时候(Iterator遍历)修改集合元素,会产生ConcurrentModificationException,使用iterator.remove()则不会产生此异常。
产生ConcurrentModificationException原因:modCount在Iterator中与原本的集合不一致。modCount指的是集合的修改次数,每次修改集合就会+1。
2.双向迭代接口:ListIterator
此接口定义的方法:
(1)判断是否有上一个元素:public boolean hasPrevious();
(2)取得上一个元素:public E previous();
·取得ListIterator接口对象:public ListIterator listIterator();

如:ListIterator接口使用

public class Test{
	public static void main(String[] args) {
		List<String> list = new ArrayList<>();
		list.add("A");
		list.add("A");
		list.add("B");
		list.add("C");

		ListIterator<String> listIterator = list.listIterator();
		//从前向后输出
		while(listIterator.hasNext()) {
			System.out.print(listIterator.next() + " ");
		}
		System.out.println();
		//从后向前输出
		while(listIterator.hasPrevious()) {
			System.out.print(listIterator.previous() + " ");
		}
	}
}
注意:只有List接口才有。要想实现从后向前输出,必须先从前向后输出。
3.Enumeration枚举输出
Enumeration的接口定义:
(1)判断是否有下一个元素:public boolean hasMoreElements();
(2)取得元素:public E nextElement();
取得这个接口的实例化对象,只能够依靠Vector子类。在Vector类中提供有一个取得Enumeration接口对象的方法:
public Enumeration elements()

如:使用Enumeration输出

public class Test{
	public static void main(String[] args) {
		Vector<String> vector = new Vector<>();
		vector.add("A");
		vector.add("A");
		vector.add("B");
		vector.add("C");
		
		Enumeration<String> enumeration = vector.elements();
		while(enumeration.hasMoreElements()) {
			System.out.println(enumeration.nextElement());
		}
	}
}
4.foreach输出

如:使用foreach输出

public class Test{
	public static void main(String[] args) {
		List<String> list = new ArrayList<>();
		list.add("A");
		list.add("A");
		list.add("B");
		list.add("C");
		for (String string : list) {
			System.out.println(string);
		}
	}
}