Map集合的遍历有四种方法,但是整体来说就是两个方法向:
方向一:通过键找值;把键存在其他集合中,然后遍历集合
方法一: map.keySet()
方法四: map.values(); // 只能遍历所有的value,key无法操作
方向二:键值对;通过键值对获得对于的键和值
方法二: map.entrySet().forEach() // 使用了lambda,所以里面的变量是final修饰的不能改变
方法三: map.entrySet().iterator() // 此时里面的变量是可以改变的
package com.example.demo002.service;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.*;
public class test {
public static void main(String[] args) {
HashMap<Person, String> map = new HashMap<>();
map.put(new Person("01", 10), "01");
map.put(new Person("01", 10), "02"); // HashMap重写equals和hashcode会覆盖掉第一条数据的值,因为键唯一
map.put(new Person("03", 30), "03");
System.out.println(map);
// 方向一:
// 方法一:
Set<Person> personSet = map.keySet();
for (Person person : personSet) {
String value = map.get(person);
System.out.println(person + ":1:" + value);
}
System.out.println();
// 方法四:
Collection<String> collection = map.values(); // 缺陷:只能遍历所有的value,key无法操作
for (String value : collection) {
System.out.println(":04:" + value);
}
// 方向二:
System.out.println();
// 方法二:
map.entrySet().forEach(personStringEntry -> { // 使用了lambda,所以里面的变量是final修饰的不能改变
System.out.println(personStringEntry.getKey() + ":2:" + personStringEntry.getValue());
});
System.out.println();
// 方法三:
Iterator<Map.Entry<Person, String>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) { // 此时里面的变量是可以改变的
Map.Entry<Person, String> entry = iterator.next();
System.out.println(entry.getKey() + ":3:" + entry.getValue());
}
}
}
@Data
@NoArgsConstructor
@AllArgsConstructor
class Person {
private String name;
private int age;
}