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

来源:互联网 发布:乐视手机网络不稳定 编辑:程序博客网 时间:2024/05/22 11:38

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

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--->zhangsan2--->lisi3--->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);}}}
输出结果:

aaabbbccc
总之,集合的输出最常用的几种方式: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 0
原创粉丝点击