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();
}
}
}







网友评论