集合的遍历

依次获取集合中的每一个元素

将集合转换成数组,遍历数组

//取出所有的学号, 迭代之后显示学号为1004-1009
        Object[]  c=map.keySet().toArray();//取出学号转换为数组
        System.out.println(c);
        for (int i = 0; i < c.length; i++) {

            int n=(int)c[i];//数组向下转型
            if(n>=1004&&n<=1009){
                System.out.println(n);
            }
        }

for循环与迭代器

package collectionTest;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class test {
    public static void main(String[] args) {
        List list=new ArrayList();
        list.add("aaa");
        list.add("ccc");
        list.add("vvv");
        list.add("bbb");
        list.add("nnn");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        //foreach循环遍历,没有下标,需要的话可以自己定义
        for(Object s:list){
            System.out.println(s);
        }
        Iterator iter=list.iterator();
        while(iter.hasNext()){//判断有没有下一个
            System.out.println(iter.next());
        }
        Map map=new HashMap();
        map.put("aa", 1);
        map.put("bb", 2);
        map.put("cc", 3);
        map.put("dd", 4);

        Set set=map.keySet();//返回Set集合,存放map的键的值
        for(Object o:set){
            System.out.println(o);//输出对象的键
            System.out.println(map.get(o));//输出对象的值,无序
        }
        Iterator iter2=set.iterator();
        while(iter2.hasNext()){//遍历
            System.out.println(map.get(iter2.next()));
        }
        Collection c=map.values();//返回Collection
        Iterator iter3=c.iterator();
        while(iter3.hasNext()){
            System.out.println(iter3.next());
        }
    }
}

Iterator iterator():迭代器,集合的专用遍历方式

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Test1 {
    public static void main(String[] args) {
        // 创建集合对象
        Collection c = new ArrayList();

        // 创建并添加元素
        // String s = "hello";
        // c.add(s);
        c.add("hello");
        c.add("world");
        c.add("java");

        // Iterator iterator():迭代器,集合的专用遍历方式
        Iterator it = c.iterator(); // 实际返回的肯定是子类对象,这里是多态

        // Object obj = it.next();返回下一个元素,然后跳到下一个,最开始因为本身没有所以返回的是第一个
        // System.out.println(obj);
        // System.out.println(it.next());//返回下一个元素之后自身跳到下一个等待调用
        // System.out.println(it.next());
        // System.out.println(it.next());
        // System.out.println(it.next());
        // 最后一个不应该写,所以,我们应该在每次获取前,如果有一个判断就好了
        // 判断是否有下一个元素,有就获取,没有就不搭理它

        // if (it.hasNext()) {
        // System.out.println(it.next());
        // }
        // if (it.hasNext()) {
        // System.out.println(it.next());
        // }
        // if (it.hasNext()) {
        // System.out.println(it.next());
        // }
        // if (it.hasNext()) {
        // System.out.println(it.next());
        // }
        // if (it.hasNext()) {
        // System.out.println(it.next());
        // }

        // 最终版代码
        while (it.hasNext()) {
            // System.out.println(it.next());
            String s = (String) it.next();
            System.out.println(s);//如果这里输出的是it.next()  就会跳着输出下一个
        }
    }
}

for 迭代

for(Iterator it = c.iterator();it.hasNext();){

            String s = (String) it.next();
            System.out.println(s);
        }

这种方法的优势在于,循环结束后 Iterator it 就被销毁了,所以比使用while更加节约资源。

迭代器使用问题的探讨:

Iterator iter=list.iterator();//iterator返回的是子类对象,这里是多态
        while(iter.hasNext()){
            System.out.println("学生姓名:"+((Student)iter.next()).getName());//通过转型在调用getName方法
        }

以上这种方法可以通过转型选择性的输出对象的信息,但是需要特别注意的是,输出只能调用一次 next 方法,如果多次调用 ,再次出现next就是下一个对象了。

迭代器的原理

迭代器为什么是一个接口而不是一个类?

如果迭代器是一个类,这样我们就可以创建迭代器的对象,使用该类的方法来事先集合的遍历。但是Java中有不同的集合类,这些类的数据结构也是不同的,所以存储方式和遍历方式也应该是不同的,所以使用将迭代器定义为一个类是不适合的。

无论是哪种集合,都应该具备获取元素的操作,并且最好在辅助与判断功能,这样在获取前先判断更不容易出错,也就是说判断功能和获取功能应该是一个集合所具备的,而每种集合的方式也不太一样,所以我们把这两个功能提取出来并不具体实现,这就是接口。

真正的实现类,在真正具体的子类中,以内部类的方式体现的。

迭代器的源码

public interface Inteator {
    boolean hasNext();
    Object next();
}

public interface Iterable {
    Iterator iterator();
}

public interface Collection extends Iterable {
    Iterator iterator();
}

public interface List extends Collection {
    Iterator iterator();
}

public class ArrayList implements List {
    public Iterator iterator() {
        return new Itr();
    }

    private class Itr implements Iterator {
        public boolean hasNext() {}
        public Object next(){}
    }
}

Collection c = new ArrayList();
c.add("hello");
c.add("world");
c.add("java");
Iterator it = c.iterator();     //new Itr();
while(it.hasNext()) {
    String s = (String)it.next();
    System.out.println(s);
}

最新文章

  1. Laravel 5.x 请求的生命周期(附源码)
  2. 被嫌弃的eval和with
  3. Python之路 day2 集合的基本操作
  4. c++类的声明和对象的定义---10
  5. ArrayList和LinkedList的几种循环遍历方式及性能对比分析(转载)
  6. [团队项目]第二个冲刺 看板和燃尽图 Sprint2 6.8/6.9/6.10/6.11/6.12/6.13/6.14
  7. Javascript与Flash通信全解析
  8. JavaAppArguments.java程序的更改
  9. oracle 查看最大连接数与当前连接数
  10. layui select 选完其他选项, 手工清空选项 又恢复最初的选项?
  11. Struts2_参数获得方式
  12. MySQL使用root用户授权出现错误ERROR 1045 (28000) at line 2: Access denied for user &#39;root&#39;@&#39;%&#39; (using password: YES)解决办法
  13. noteforjs
  14. python 生成器 和生成器函数 以及各种推导式
  15. C++操作符的优先级 及其记忆方法
  16. RabbitMQ.NET In Window Service
  17. leetcode:Insert Sort List
  18. Vertex-Based Diffusion for 3-D Mesh Denoising(三维网格去噪中基于顶点的扩散算法)
  19. 添加引用方式抛出和捕获干净的WebService异常
  20. **三元运算和lambda

热门文章

  1. dedecms的热门标签在那里修改
  2. java入门学习笔记之2(Java中的字符串操作)
  3. oracle删除数据后表空间仍过大问题解决方法
  4. python可视化--matplotlib
  5. XCOM2中敌对生物设计分析(Aliens篇)
  6. ASP.NET Core 源码学习之 Options[1]:Configure
  7. 技术分析 | 新型勒索病毒Petya如何对你的文件进行加密
  8. maven打包 bat自动化打包
  9. php添加pcntl扩展(Linux)
  10. pl_sql develope连接远程数据库的方法