一,Map集合的第一种迭代
Map集合的第一种迭代,通过get(key)方法,根据键去获取值
package com.wsq.map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Demo2_Iterator {
/**
* 通过查看Map集合的API发现没有Iterator方法,那么双列集合如何迭代呢?
* Map集合的第一种迭代形式
* 迭代==遍历
* */
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();//双列集合,键是String类型,值是Integer类型
map.put("张三", 23);
map.put("李四", 24);
map.put("王五", 25);
map.put("赵六", 26);
/*
//根据键,去获取值
Integer wsq = map.get("张三"); //获取map双列集合中的键
System.out.println(wsq); //打印输出map双列结合中的值
*/
/*
* ①双列集合的第一种遍历形式,通过迭代器进行遍历
//获取所有键
Set<String> keySet = map.keySet(); //map.keySet():获取所有的键的集合,键是String类型
Iterator<String> it = keySet.iterator(); //获取迭代器 it
while(it.hasNext()){ //判断集合中是否有元素;iterator():如果迭代器具有多个元素,则返回 true
String key = it.next(); //获取每一个键,键是String类型;next():返回迭代的下一个元素。
Integer value = map.get(key); //根据键获取值,值是Integer类型;get(key):指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null
System.out.println(key + "=" + value ); //打印键和值
}
*/
/*
//②双列集合的第二种遍历形式,使用增强for循环遍历
for (String key : map.keySet()) { //for(临时变量,也就是想要获取的变量,这里是想要通过键去获取值,String key 表示的是每一个键:容器的名字,这里是 map.ketSet()) map.ketSet()是所有键的集合,拿到所有的键
System.out.println(key + "=" + map.get(key)); //增强for循环迭代双列集合第一种方式
}
*/
}
}
二,Map集合的第二种迭代
Map集合的第二种迭代,根据键值对对象(也就是把键值对当成一个对象),获取键和值
也就是把双列集合的键值对,变成单列集合的键值对对象,然后遍历这个集合,获取每一个键值对对象,根据键值对对象获取键和值
解释一下Map.Entry
package com.wsq.map;
public class Demo4_MapEntry {
public static void main(String[] args) {
}
}
interface Inter{
interface Inter2{
public void show();
}
}
class wsq implements Inter.Inter2{//这里的wsq类想继承Inter2,当出现Inter.Inter2,也就是说,Inter2是Inter的内部接口
//同样的道理,Map.Entry,也就是说,Entry是Map里面的一个内部接口
@Override
public void show() { //实现接口要重写人家里面的抽象方法
}
}
package com.wsq.map;
import java.security.KeyStore.Entry;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Demo3_Iterator {
/**
* Map集合的第二种迭代,根据键值对对象,获取键和值
* A:键值对对象找键和值思路
* * 获取所以键值对对象的集合
* * 遍历键值对对象的集合,获取到每一个键值对对象
* * 根据键值对对象找键和值
* */
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("张三", 23);
map.put("李四", 24);
map.put("王五", 25);
map.put("赵六", 26);
/*
//①通过迭代器去遍历
Set<Map.Entry<String, Integer>> entrySet = map.entrySet(); //Map.Entry说明Entry是Map的内部接口,将键和值封装成了Entry对象,并存储在Set集合中;遍历双列集合里面存储的都是Entry对象,所以通过迭代器迭代的应该也是Entry对象
Iterator<Map.Entry<String, Integer>> it = entrySet.iterator(); //通过迭代器去获取每一个对象,<Map.Entry<String, Integer>>泛型的迭代应该一致
while(it.hasNext()){ //hasNext():如果迭代器具有多个元素,则返回 true;通过循环开始获取每一个Entry对象
Map.Entry<String, Integer> wsq = it.next(); //①父类引用指向子类对象;这里的wsq就代表每一个Entry对象
//Entry<String, Integer> wsq = it.next(); //②直接获取的是子类对象
String key = wsq.getKey(); //Set<Map.Entry<K,V>>下有个getKey():返回与此项对应的键;根据键值对对象获取对应的键
Integer value = wsq.getValue(); //Set<Map.Entry<K,V>>下有个getValue():返回与此项对应的值;根据键值对对象获取对应的值
System.out.println(key + "=" + value);
}*/
/*
//②通过增强for循环遍历
for (Map.Entry<String, Integer> wsq : map.entrySet()) { //for(定义一个临时变量的数据类型跟Entry对象的数据类型一致也就是Map.Entry<String, Integer> wsq代表每一个键值对象 : )
System.out.println(wsq.getKey() + "=" + wsq.getValue()); //通过键值对象来获取它里面的getKey()和getValue();getKey():返回与此项对应的键 getValue():返回与此项对应的值
}*/
}
}