集合的四种遍历输出的方式

Iterator

单向迭代输出

常用方法:hasNext(),next();

Collection内部实现了Iterable接口,List和Set和set的子类都可以通过这个接口实现遍历输出。

以Arraylist为:

		List<Integer> list = new ArrayList<>();
		list.add(9);
		list.add(5);
		list.add(2);
		list.add(7);
		Iterator<Integer> itr = list.iterator();// Iterator声明对象,list.iterator返回Iterator对象
		while (itr.hasNext()) {// 判断是否有下一个数据
			System.out.println(itr.next());// 遍历输出
		}

以TreeSet为例:

		Set <Integer>set=new TreeSet<>();
		set.add(9);
		set.add(5);
		set.add(2);
		set.add(7);
		Iterator<Integer> itr = set.iterator();// Iterator声明对象,set.iterator返回Iterator对象
		while (itr.hasNext()) {// 判断是否有下一个数据
			System.out.println(itr.next());// 遍历输出
		}

而Set的底层实现就是Map,因此将Map转换成Set依然可以使用此方法遍历输出.

以TreeMap为例:

Map<Integer, String> map=new HashMap<>();
		map.put(9, "h");
		map.put(5, "o");
		map.put(2, "l");
		map.put(7, "a");
		Set<Map.Entry<Integer, String>>set=map.entrySet();//将Map转换成Set
		Iterator<Map.Entry<Integer, String>> itr=set.iterator();
		while(itr.hasNext()) {
			Map.Entry<Integer,String> en=itr.next();
			en.getKey();
			System.out.println("key: "+en.getKey()+"  values: "+en.getValue());
		}

ListIterator

双向迭代输出

常用方法:hasNext(),next(),hasPrevious

只有List接口内部实现 ListIterator方法,因此只有List及其子类支持这个方法。

例:

List<Integer> list = new ArrayList<>();
		list.add(9);
		list.add(5);
		list.add(2);
		list.add(7);

		ListIterator<Integer> itr = list.listIterator();// Iterator声明对象,list。listIterator返回ListIterator对象
		while (itr.hasNext()) {// 判断是否有下一个数据
			System.out.println(itr.next());// 往后遍历输出
		}

		while (itr.hasPrevious()) {// itr已经遍历到最后了,因此他可以往前遍历
			System.out.println(itr.previous());
		}

Enumeration 

枚举输出

常用方法:hasMoreElements(),nextElement()

在Vector类中提供一个有取得Enumeration接口对象的方法,因此只有 Vector 可以使用这种方式输出

例:

Vector<Integer> vector=new Vector<>();
		vector.add(9);
		vector.add(5);
		vector.add(2);
		vector.add(7);

		Enumeration<Integer> en =vector.elements();
		while(en.hasMoreElements()) {
			System.out.println(en.nextElement());
		}

foreach

foreach是java中的语法糖,可以输出任何集合类:

		Map<Integer, String> map = new HashMap<>();
		map.put(9, "h");
		map.put(5, "o");
		map.put(2, "l");
		map.put(7, "a");

		for(Map.Entry<Integer,String>en:map.entrySet()) {
			System.out.println("key: "+en.getKey()+" values: "+en.getValue());
		}

需要注意的是:在遍历集合的过程中,不可以使改集合发生结构性变化,否则会产生快速失败

详见:https://blog.csdn.net/weixin_41891854/article/details/81748928

猜你喜欢

转载自blog.csdn.net/weixin_41891854/article/details/82053872