下面通过四种方式来取出map中的key和value
方案:1.entrySet
2.keySet
方式:1.for
2.while
注意:通过key来获取value的效率非常低,要避免这样使用
代码块
package com.example.demo.util;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class TraverseMap {
public static void main(String[] args) {
//1. 初始化map
Map<Integer,String> map = new HashMap<>();
map.put(1,"aaa");
map.put(2,"bbb");
map.put(3,"ccc");
//2. 遍历map几种方式
System.out.println("\n方式一");
lambdaMethodForLargeCapacity(map);
System.out.println("\n方式二");
lambdaMethod(map);
System.out.println("\n方式三");
entrySetAndWhile(map);
System.out.println("\n方式四");
entrySetAndFor(map);
System.out.println("\n方式五");
keySetAndFor(map);
System.out.println("\n方式六");
keySetAndWhile(map);
System.out.println("\n遍历key");
traverseKey(map);
System.out.println("\n遍历value");
traverseValue(map);
}
/**
* 使用java8新特性forEach+Lambda遍历
* 大容量推荐使用
*/
public static void lambdaMethodForLargeCapacity(Map<Integer,String> map){
map.entrySet().forEach(entry->
System.out.println("id: " + entry.getKey() + ", value: " + entry.getValue())
);
}
/**
* 使用java8新特性forEach+Lambda遍历
* 推荐使用
*/
public static void lambdaMethod(Map<Integer,String> map){
System.out.println("方式一:");
map.forEach((k,v) -> System.out.println("id: " + k + ", value: " + v));
System.out.println("方式二:");
map.forEach((k,v)-> {
System.out.println("k: " + k + " v : " + v);
// to do other something
});
}
/**
* 方案:entrySet
* 方式:while
*/
public static void entrySetAndWhile(Map<Integer,String> map){
Set<Map.Entry<Integer, String>> set = map.entrySet();
Iterator<Map.Entry<Integer, String>> it = set.iterator();
while(it.hasNext()){
Map.Entry<Integer, String> entry = it.next();
System.out.println("id: " + entry.getKey() + ", value: " + entry.getValue());
}
}
/**
* 方案:entrySet
* 方式:for
*/
public static void entrySetAndFor(Map<Integer,String> map){
for(Map.Entry<Integer, String> entry : map.entrySet()){
System.out.println( "id: "+ entry.getKey() + ", value: " + entry.getValue());
}
}
/**
* 方案:keySet
* 方式:for
* 思路;低
*/
public static void keySetAndFor(Map<Integer,String> map){
for(Integer id : map.keySet()){
System.out.println( "id: "+ id + ", value: " + map.get(id));
}
}
/**
* 方案:keySet
* 方式:while
* 思路:获取key,通过while循环间接获取value
* 思路;低
*/
public static void keySetAndWhile(Map<Integer,String> map){
Set<Integer> set2 = map.keySet();
Iterator<Integer> it2 = set2.iterator();
while(it2.hasNext()){
Integer id = it2.next();
System.out.println( "id: "+ id + ", value: " + map.get(id));
}
}
/**
* 遍历value
*/
public static void traverseValue(Map<Integer,String> map){
System.out.println("lambda方式遍历value:");
map.values().forEach(System.out::println);
System.out.println("\n普通方式遍历value:");
for (String value : map.values()) {
System.out.println(value);
}
}
/**
* 遍历key
*/
public static void traverseKey(Map<Integer,String> map){
System.out.println("lambda方式遍历key:");
map.keySet().forEach(k->
System.out.println("k:v=" + k + ":" + map.get(k))
);
System.out.println("\n普通方式遍历key:");
for (Integer key : map.keySet()) {
System.out.println(key);
}
}
}
输出
方式一
id: 1, value: aaa
id: 2, value: bbb
id: 3, value: ccc
方式二
方式一:
id: 1, value: aaa
id: 2, value: bbb
id: 3, value: ccc
方式二:
Item : 1 Count : aaa
Item : 2 Count : bbb
Item : 3 Count : ccc
方式三
id: 1, value: aaa
id: 2, value: bbb
id: 3, value: ccc
方式四
id: 1, value: aaa
id: 2, value: bbb
id: 3, value: ccc
方式五
id: 1, value: aaa
id: 2, value: bbb
id: 3, value: ccc
方式六
id: 1, value: aaa
id: 2, value: bbb
id: 3, value: ccc
遍历key
lambda方式遍历key:
k:v=1:aaa
k:v=2:bbb
k:v=3:ccc
普通方式遍历key:
1
2
3
遍历value
lambda方式遍历value:
aaa
bbb
ccc
普通方式遍历value:
aaa
bbb
ccc