集合的遍历

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

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

//取出所有的学号, 迭代之后显示学号为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);
}

Java之集合的遍历与迭代器的更多相关文章

  1. java关于集合的遍历与增强for循环(foreach)的使用

     java集合类的使用可以说是无处不在,总的我们可以将之分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合.      许多情况需要我们遍历出集合 ...

  2. Java自学-集合框架 遍历

    遍历ArrayList的三种方法 步骤 1 : 用for循环遍历 通过前面的学习,知道了可以用size()和get()分别得到大小,和获取指定位置的元素,结合for循环就可以遍历出ArrayList的 ...

  3. Java基础知识强化之集合框架笔记07:Collection集合的遍历之迭代器遍历

    1. Collection的迭代器: Iterator iterator():迭代器,集合的专用遍历方式 2. 代码示例: package cn.itcast_03; import java.util ...

  4. Java 中List 集合索引遍历与迭代器遍历

    package yzhou.iterator; import java.util.ArrayList; import java.util.HashSet; import java.util.Itera ...

  5. JAVA中集合转数组遍历

    JAVA中集合的遍历的一种方法时集合转数组遍历,也是就调用Collection中的toArray(). 代码: public static void main(String[] args) {     ...

  6. 对JAVA集合进行遍历删除时务必要用迭代器

    java集合遍历删除的方法: 1.当然这种情况也是容易解决,实现方式就是讲遍历与移除操作分离,即在遍历的过程中,将需要移除的数据存放在另外一个集合当中,遍历结束之后,统一移除. 2.使用Iterato ...

  7. Java 集合-Collection接口和迭代器的实现

    2017-10-30 00:30:48 Collection接口 Collection 层次结构 中的根接口.Collection 表示一组对象,这些对象也称为 collection 的元素.一些 c ...

  8. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  9. Java集合框架概述和集合的遍历

    第三阶段 JAVA常见对象的学习 集合框架概述和集合的遍历 (一) 集合框架的概述 (1) 集合的由来 如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个非常简单的程序. 通常,程序 ...

随机推荐

  1. 在Caffe添加Python layer详细步骤

    本文主要讨论的是在caffe中添加python layer的一般流程,自己设计的test_python_layer.py层只是起到演示作用,没有实际的功能. 1) Python layer 在caff ...

  2. python str转dict

    两种方法 捷径 eval(str) >>> user = "{'name' : 'jim', 'sex' : 'male', 'age': 18}" >&g ...

  3. Disruptor——一种可替代有界队列完成并发线程间数据交换的高性能解决方案

    本文翻译自LMAX关于Disruptor的论文,同时加上一些自己的理解和标注.Disruptor是一个高效的线程间交换数据的基础组件,它使用栅栏(barrier)+序号(Sequencing)机制协调 ...

  4. Myeclipse中隐藏jar包

    在package explorer的右上角有一个向下的小三角 点击选择Filter 在打开的对话框中 第一个选框中打上对勾 文字框中填上 *.jar 然后点击OK就行了 多个隐藏内容之间用逗号隔开 如 ...

  5. python实现微信接口(itchat)

    python实现微信接口(itchat) 安装 sudo pip install itchat 登录 itchat.auto_login() 这种方法将会通过微信扫描二维码登录,但是这种登录的方式确实 ...

  6. 开源框架GreenDao的操作

    1.为什么需要GreenDao?Google原生API不方便 @1手动组拼SQL语句 @2需要自己写操作数据库代码 @3不能把数据库中的数据映射成对象 @4没有实现关联查询 2.GreenDao是什么 ...

  7. Entity Framework入门教程:什么是Entity Framework

    Entity Framework简介 Entity Framework是微软提供的一个O/RM(对象关系映射)框架.它基于ADO.NET,为开发人员提供了一种自动化的机制来访问和存储数据库中的数据. ...

  8. EventBus In eShop -- 解析微软微服务架构Demo(四)

    引言 大家好像对分析源码厌倦了,说实在我也会厌倦,不过不看是无法分析其后面的东西,从易到难是一个必要的过程. 今天说下EventBus,前几天园里的大神已经把其解刨,我今天就借着大神的肩膀,分析下在e ...

  9. [leetcode-561-Array Partition I]

    Given an array of 2n integers, your task is to group these integers into n pairs of integer,say (a1, ...

  10. 一个用 js 实现点阵图的编辑器演示

    这是个客户的需求,具体大概是可以在一个 24*8 的点阵图上自由绘制图形,然后数据的存储是按列依次记录,用0和1分别表示是否选中,最终串成一个字符串. 整体需求难度并不复杂,所以在写demo的时候就尽 ...