Java类集学习(五)集合的输出

集合的标准输出中提供了四种常见的输出方式:

Iterator:迭代输出,使用最多的输出方式;

ListIterator:Iterator的子接口,专门用于输出List中的内容;

Enumeration:旧的接口,功能与Iterator类似;

foreach:可以输出数组或集合。

1、Iterator 迭代输出

所谓迭代输出就是将元素一个个进行判断,判断其是否有内容,如果有内容则把内容取出。

Iterator接口在使用时需要指定泛型,此处指定的泛型要与集合中的类型一致。

实例化Iterator接口:Iterator<集合的泛型类型> iter = 集合的实例.iterator();

(1)输出Collection中的全部内容

Iterator接口可以直接使用Collection接口中定义的Iterator()方法为其实例化,所以List和Set子接口中也可以使用Iterator接口输出。

hasNext()方法返回Boolean类型:是否有下一个

next()方法返回的是集合泛型指定的类型:取内容

public class IteratorDemo01 {
	/**
	 *Iterator接口,迭代输出Collection中的全部内容
	 */
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("Hello");
		list.add("_");
		list.add("world");
		System.out.println("集合内容:"+list);
		Iterator<String> iter = list.iterator();
		System.out.print("内容输出:");
		while(iter.hasNext()){
			System.out.print(iter.next()+"、");
		}
	}
}

输出结果:

集合内容:[Hello, _, world]
内容输出:Hello、_、world、

(2)输出Map的全部内容

对于Map接口不能直接使用迭代输出(Iterator、foreach),因为Map接口的每个位置存放的是一对值(key--->value),而Iterator中每次只能找到一个值。

要用Iterator就需要把Map--------->Set接口的对象,迭代出的每个内容都是Map.Entry对象,具体步骤:

a、Map接口实例通过entrySet()方法变为Set接口对象;

b、通过Set的实例为Iterator实例化;

c、使用Iterator迭代输出,每个内容都是Map.Entry的对象;

d、通过Map.Entry进行key-value的分离。

public class IteratorDemo04 {
	public static void main(String[] args) {
		Map<Object,String> map = new HashMap<Object,String>();
		map.put(1, "zhangsan");
		map.put(2, "lisi");
		map.put(3, "wangwu");
//		声明Set集合(泛型为Map.Entry类),用Map的实例map对Set接口实例化
		Set<Map.Entry<Object,String>> allSet = map.entrySet();
//		声明Iterator接口(泛型与Set一致),对其实例化
		Iterator<Map.Entry<Object, String>> iter = allSet.iterator();
//		迭代输出
		while(iter.hasNext()){
//			找到Map.Entry实例
			Map.Entry<Object, String> me = iter.next();
			System.out.println(me.getKey()+"--->"+me.getValue());
		}
	}
}
输出结果:

1--->zhangsan
2--->lisi
3--->wangwu
(3)删除集合的指定内容

Iterator中的remove()方法

public class IteratorDemo02 {
	/**
	 * 删除内容
	 */
	public static void main(String[] args) {
		List<String> all = new ArrayList<String>();
		all.add("hello");
		all.add("_");
		all.add("world");
		System.out.println("创建的集合内容:"+all);
		Iterator<String> iter = all.iterator();
		while(iter.hasNext()){
			String str = iter.next();
			if("_".equals(str)){
				iter.remove();
			}
		}
		System.out.println("删除之后:"+all);
	}
}
输出结果:

创建的集合内容:[hello, _, world]
删除之后:[hello, world]

2、ListIterator 双向迭代输出

此种输出方式只有List接口可以做到

由前向后:.next();  由后向前:.previous()

若想完成由后向前输出,必须先进行由前向后输出。

3、foreach

foreach可以完成数组或集合的输出,

for(类 对象 :集合){

//  集合操作

}

public class ForEachDemo {
/**
 * foreach输出集合内容
 */
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
//		String:集合指定的泛型;str:命名的对象;list:集合实例。输出对象
		for(String str : list){
			System.out.println(str);
		}
	}
}
输出结果:

aaa
bbb
ccc
总之,集合的输出最常用的几种方式:for循环,Iterator,foreach

对于ArrayList,Vector 其核心是一个数组, 如果明确知道List的实例是ArrayList,Vector,当然用 for(int i=0; i<lst.size();i++){} 这种方式是最快的.  当然用Iterator 的话,其实是相关无几,Iterator 基本上都是指针操作, Iterator本身的处理会增加一点点的开销,跟踪一下源码就可以知道.
Iterator 好处:通用,对于所有集合,使用Iterator性能都一样, 客户端自身不维护遍历集合的"指针",所有的内部状态(如当前元素位置,是否有下一个元素)都由Iterator来维护,而这个Iterator由集合类通过工厂方法生成,因此,它知道如何遍历整个集合。
客户端从不直接和集合类打交道,它总是控制Iterator,向它发送"向前","向后","取当前元素"的命令,就可以间接遍历整个集合。

foreach和Iterator差不多,核心是一样的。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值