美文网首页
foreach和Iterator的区别

foreach和Iterator的区别

作者: 王康健_0124 | 来源:发表于2018-07-19 11:57 被阅读0次

Iterator和foreach的区别:多态差别(foreach底层就是Iterator)

Iterator是一个接口类型,他不关心集合或者数组的类型;
for和foreach都需要先知道集合的类型,甚至是集合内元素的类型;

package com.guoyasoft.topic.string;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class TestJianShu {
    public static void main(String[] args) {
        // 前端界面传的金额、年龄等为字符串,后端要进行数字计算,必须转成对应类型的数字
        HashMap<String, String> ha = new HashMap<String, String>();
        String param = "ct=17&pn=0&tn=ikaslist&rn=10&fr=wwwt&word=简历%20英文";

        String[] params = param.split("&");
        // 按照&符号进行分割,获得多个键值对,存到容器中

        for (String s : params) {
            // 遍历出所有分割后的字符串
            String[] entry = s.split("=");

            // 这里只是一个验证打印,看一下分割后的数据,是否按照等号分割成HashMap类型的数据
            // System.out.println(entry[0] + "=" + entry[1]);

            // 二次分割,获得键值对,然后把分割后的数据存到HashMap数组中
            ha.put(entry[0], entry[1]);
        }
        // System.out.println(ha.get("tn"));
        // 取存到HashMap中的数据,按key进行取值
        // System.out.println();

        Set<Entry<String, String>> mapha = ha.entrySet();
        // 调用Map.entrySet()方法,把所有<K,V>键值对的集合,一对对的放入到一个set的数组集合中,
        // Set泛型:Entry<String, String>,由创建HashMap数组时定义的泛型类型

        Iterator<Entry<String, String>> itmap = mapha.iterator();
        // iterator迭代器模式:为遍历不同的容器结构提供一个统一的接口(多态迭代)
        // Iterator模式:使得我们可以在不知道对象内部表示的情况下,按照一定顺序(由iterator提供的方法)访问聚合对象中的各个元素。
        // 简单理解就是,数组调用iterator()方法,数组自身进行排序,可以使用.hasNext()和.next访问所有数组中数据

        //Iterator和foreach的区别:多态差别,因为foreach底层就是Iterator
        //Iterator是一个接口类型,他不关心集合或者数组的类型;
        //for和foreach都需要先知道集合的类型,甚至是集合内元素的类型;
        
        while (itmap.hasNext()) {
            //调用Iterator接口类,它并不关系遍历的是什么类型的数组,直接.next()拿值
            //这里把拿到的值重新存到一个对应类型的变量中,其实可以直接itmap.next().getKey();取值
            Map.Entry<String, String> item = itmap.next();
            String key = item.getKey();
            String value = item.getValue();
        }

        for (Entry<String, String> entry : mapha) {
            //在做foreach遍历,必须先知道遍历的数组类型
            String key = entry.getKey();
            String value = entry.getValue();
        }

    }
}

相关文章

网友评论

      本文标题:foreach和Iterator的区别

      本文链接:https://www.haomeiwen.com/subject/xittmftx.html