Java学习----集合迭代器

来源:互联网 发布:论文中英文翻译软件 编辑:程序博客网 时间:2024/05/22 17:24

1、 迭代器
任何容器类,都必须有某种方式可以将东西放进去,然后由某种方式将东西取出来。毕竟,存放事物是容器最基本的工作。对于ArrayList,add()是插入对象的方法,而get()是取出元素的方式之一。ArrayList很灵活,可以随时选取任意的元素,或使用不同的下标一次选取多个元素。
如果从更高层的角度思考,会发现这里有一个缺点:要使用容器,必须知道其中元素的确切类型。初看起来这没有什么不好的,但是考虑如下情况:如果原本是ArrayList ,但是后来考虑到容器的特点,你想换用Set ,应该怎么做?或者你打算写通用的代码,它们只是使用容器,不知道或者说不关心容器的类型,那么如何才能不重写代码就可以应用于不同类型的容器?
所以迭代器(Iterator)的概念,也是出于一种设计模式就是为达成 此目的而形成的。所以Collection不提供get()方法。如果要遍历Collectin中的元素,就必须用Iterator。
迭代器(Iterator)本身就是一个对象,它的工作就是遍历并选择 集合序列中的对象,而客户端的程序员不必知道或关心该序列底层的结构。此外,迭代器通常被称为“轻量级”对象,创建它的代价小。但是,它也有一些限制,例如,某些迭代器只能单向移动。
Collection 接口的 iterator() 方法返回一个 Iterator。Iterator 和您可能已经熟悉的 Enumeration 接口类似。使用 Iterator 接 口方法,您可以从头至尾遍历集合,并安全的从底层 Collection 中除去元素。

package com.thread;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;public class IteratorDemo {    public static void main(String[] args) {        Collection collection = new ArrayList();           collection.add("s1");           collection.add("s2");           collection.add("s3");            Iterator iterator = collection.iterator();//得到一个迭代器    while (iterator.hasNext())         {//遍历                Object element = iterator.next();                System.out.println("iterator = " + element);                }            if(collection.isEmpty())                System.out.println("collection is Empty!");           else                  System.out.println("collection is not Empty! size="+collection.size());            Iterator iterator2 = collection.iterator();           while (iterator2.hasNext()) {//移除元素            Object element = iterator2.next();                System.out.println("remove: "+element);     iterator2.remove();               }               Iterator iterator3 = collection.iterator();           if (!iterator3.hasNext())        {//察看是否还有元素                System.out.println("还有元素");              }             if(collection.isEmpty())                  System.out.println("collection is Empty!");            //使用collection.isEmpty()方法来判断         }    }

运行结果:
iterator = s1
collection is not Empty! size=3
remove: s1
remove: s2
remove: s3
还有元素
collection is Empty!

可以看到,Java的Collection的Iterator 能够用来:  

1) 使用方法 iterator() 要求容器返回一个Iterator .第一次调 用Iterator 的next() 方法时,它返回集合序列的第一个元素。
2) 使用next() 获得集合序列的中的下一个元素。
3) 使用hasNext()检查序列中是否元素。
4) 使用remove()将迭代器新返回的元素删除。
需要注意的是:方法删除由next方法返回的最后一个元素,在每次调用next时,remove方法只能被调用一次 。
大家看,Java 实现的这个迭代器的使用就是如此的简单。Iterator(跌代器)虽然功能简单,但仍然可以帮助我们解决许多问题,同时针对List 还有一个更复杂更高级的ListIterator。

2、List
List 就是列表的意思,它是Collection 的一种,即继承了 Collection 接口,以定义一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理,还添加了面向位置的操作。List 是按对象的进入顺序进行保存对象,而不做排序或编辑操作。它除了拥有Collection接口的所有的方法外还拥有一些其他的方法。
面向位置的操作包括插入某个元素或 Collection 的功能,还包括获取、除去或更改元素的功能。在 List 中搜索元素可以从列表的头部或尾部开始,如果找到元素,还将报告元素所在的位置。
常用实现:ArrayList和LinkedList
ArrayList 提供快速的基于索引的成员访问,对尾部成员的增加和删除支持较好。
LinkedList 对列表中任何位置的成员的增加和删除的支持都较好,但是基于索引的成员访问支持性能较差。
二者的成员可为任意 Object子类的对象。
LinkedList里面的方法,可以把它当做一个堆栈、队列或者其他面向断点的数据结构使用。
使用LinkedList来实现简单的队列的例子

public static void main(String args[]) {     LinkedList queue = new LinkedList();     queue.addFirst("Bernadine");     queue.addFirst("Elizabeth");    queue.addFirst("Gene");    queue.addFirst("Clara");     System.out.println(queue);    queue.removeLast();     System.out.println(queue);     } 

运行结果:
[Clara, Elizabeth, Gene, Elizabeth, Bernadine]
[Clara, Elizabeth, Gene]

注意:List里面的元素是允许重复的,Set里面的元素是不允许重复的。

0 0
原创粉丝点击