Map的三种遍历方式
Map是双列集合的顶层接口,它的功能是全部双列集合都可以继承使用的。
18.13.1键找值
思路:
- 首先,需要把键全部放在一个单例集合,用keySet()方法
- 然后,遍历单列集合得到每一个键,再通过get()方法找到每个键对应的值
- 输出
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
public class Test {
public static void main(String[] args) {
//1.创建Map集合的对象
Map<String,String> m = new HashMap<>();
//2.添加元素
m.put("兔子","胡萝卜");
m.put("狗","骨头");
m.put("羊","草");
//3.通过键找值
//3.1获取所有的键,把这些键放到一个单列集合当中
Set<String> keys = m.keySet();
//3.2增强for遍历装着键的单列集合,得到每一个键
for (String key : keys) {
//3.3 利用map集合中的键获取对应的值 get
String s = m.get(key);
System.out.println(key+"="+s);
}
// 迭代器遍历装着键的单列集合
Iterator<String> it = keys.iterator();
while (it.hasNext()){
String key1 = it.next();
// System.out.println(s);//获取键
//键通过get 方法获取对应的值
String value1 = m.get(key1);
System.out.println(key1+"="+value1);
//兔子=胡萝卜 狗=骨头 羊=草
}
//Lambda表达式遍历装着键的单列集合
keys.forEach(new Consumer<String>() {
@Override
public void accept(String key2) {
// System.out.println(key2);
String value2 = m.get(key2);
System.out.println(key2+"="+value2);
//兔子=胡萝卜 狗=骨头 羊=草
}
});
}
}
18.13.2 键值对
思路:
- 通过entrySet()方法获取所有的键值对对象,放在Set集合中,集合名字为entries
- 遍历entries这个集合,去得到里面的每一个键值对对象entry
- 利用entry调用getKey()和getValue()方法获取键和值(或者直接输出entry)
- 输出
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
public class Test02 {
public static void main(String[] args) {
// Map的第2种遍历方式:键值对,
//1.创建Map集合的对象
Map<String,String> map =new HashMap<>();
//2.添加元素
map.put("兔子","胡萝卜");
map.put("狗","骨头");
map.put("羊","草");
// 3.遍历,通过键值对对象进行遍历
//通过一个方法获取所有的键值对对象,返回一个Set集合
Set<Map.Entry<String, String>> entries = map.entrySet();
//3.1 增强for遍历装着键值对的单列集合entries,去得到里面的每一个键值对对象
for (Map.Entry<String, String> entry : entries) {
// System.out.println(entry);
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+"="+value);
}
// 3.2迭代器遍历装着键值对的单列集合
Iterator<Map.Entry<String, String>> it = entries.iterator();
while (it.hasNext()){
Map.Entry<String, String> next = it.next();
// System.out.println(next);
String key = next.getKey();
String value = next.getValue();
System.out.println(key+"="+value);
}
//3.3Lambda表达式遍历装着键值对的单列集合
entries.forEach(new Consumer<Map.Entry<String, String>>() {
@Override
public void accept(Map.Entry<String, String> s) {
// System.out.println(s);
String key = s.getKey();
String value = s.getValue();
System.out.println(key+"="+value);
}
});
}
}
18.13.3 Lambda表达式
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;
public class Test03 {
public static void main(String[] args) {
// Map的第三种遍历方式
// 创建集合的对象
Map<String,String> map = new HashMap<>();
// 添加元素
map.put("兔子","胡萝卜");
map.put("狗","骨头");
map.put("羊","草");
//内名内部类形式
map.forEach(new BiConsumer<String, String>() {
@Override
public void accept(String key, String value) {
System.out.println(key+"=>"+value);
}
});
// Lambda表达式遍历
//底层:
//forEach其实就是利用第二种方式进行遍历,依次得到每一个键和值
//再调用accept方法
map.forEach((String key, String value)-> {
System.out.println(key+"=>"+value);
}
);
}
}