Java基础、中级、高级、架构面试资料

详解 Java 中的 Iterable、Itetator、Enumeration

JAVA herman 3362浏览 0评论
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云

Java 中对一些集合循环遍历做了一些特殊的封装。一些是方便我们的操作,一些是存在存储性能等方面设计的。关于 Iterable、Itetator、Enumeration,我们一起来学习它们。

Iterable

Iterable接口实现后的功能是“返回”一个迭代器,我们常用的实现了该接口的子接口有: Collection, Deque, List, Queue, Set 等.该接口的iterator()方法返回一个标准的Iterator实现。实现这个接口允许对象成为 For each 语句的目标。就可以通过For each语法遍历底层序列。

采用ArrayList对随机访问比较快,而for循环中的get()方法,采用的即是随机访问的方法,因此在ArrayList里,for循环较快。

采用LinkedList则是顺序访问比较快,iterator中的next()方法,采用的即是顺序访问的方法,因此在LinkedList里,使用iterator较快。

Iterator

在Java集合框架中Iterator用来替代Enumeration,Iterator允许调用者在迭代中从底层集合中删除元素。

接口方法如下:

boolean hasNext();//如果迭代中还有元素返回true。
Object	 next();//返回迭代中的下一个元素。
void	 remove();//迭代器从底层集合中删除刚返回的元素。该方法只能在每次调用next后调用一次。

具体用法如下:

public class TestIterator { 
    public  static void main(String[] args) {
        List list=new ArrayList();
        Map map=new HashMap();
        //初始化list和map的数据
        for(int i=0;i<10;i++){
            list.add(new String("list"+i) );
            map.put(i, new String("map"+i));
        } 
        Iterator iterList= list.iterator();//List接口实现了Iterable接口
        //循环list 
        while(iterList.hasNext()){
             System.out.println((String)iterList.next());  
        } 
        //for each是jdk5.0新增加的一个循环结构,可以用来处理集合中的每个元素而不用考虑集合定下标。
        //如需删除集合元素,慎用!!!
        for(String str : list){
            System.out.println(str);
        }
        Iterator iterMap=map.entrySet().iterator();
        //循环map
        while(iterMap.hasNext()){
            System.out.println((Map.Entry)iterMap.next().getValue());  
        } 
    } 
}

Enumeration

枚举接口,其作用和Iterator类似。只提供了遍历Vector和HashTable类型集合元素的功能,不支持元素的移除操作。

//是否还有元素,如果有返回true,否则表示至少含有一个元素
boolean hasMoreElements();
//如果Enumeration枚举对象还有元素,返回对象只能的下一个元素,否则抛出NoSuchElementException异常。
E nextElement();

使用教程如下:

public class TestEnumeration{
	public static void main(String[] args){
        //初始化创建Vector
        Vector v = new Vector();
        v.addElement("Lisa");
        v.addElement("Billy");
        v.addElement("Mr Brown");
        Enumeration e = v.elements();//返回Enumeration对象
        while(e.hasMoreElements()){
            String value = (String)e.nextElement();//调用nextElement方法获得元素
            System.out.print(value);
        }
        //初始化创建hashtable
        Hashtable<String, String> ht = new Hashtable<String, String>();
        for (int i = 0; i < 10000; i++) {
            ht.put("Key=" + i, "Val=" + i);
        }
        //1.Enumeration
        Enumeration<String> en = ht.keys();//使用枚举获取key
        //下面的也可以哦
        //Enumeration<String> en = ht.elements();//使用枚举获取这个key-value对
        while (en.hasMoreElements()) {
            System.out.print((String) en.nextElement());
        }
        //2.Iterator 迭代器
        //使用迭代器获取这个key-value对
        Iterator<Entry<String, String>> it1 = ht.entrySet().iterator();
        //使用迭代器获取这个key
        //Iterator<String> it2 = ht.keySet().iterator();
        while (it.hasNext()) {
            //System.out.print((Entry<String, String>) it1.next().getKey());
            //System.out.print((String) it2.next());
        }
    }
}

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » 详解 Java 中的 Iterable、Itetator、Enumeration