HashMap类实现了Map接口,以key-value映射的形式存储数据。假设现在有个HashMap类的对象hashMap,下面介绍遍历它的两种方式。
方式一:用hashMap的keySet方法获取所有键值组成的集合,然后通过遍历键值集合来遍历hashmap。
此方式遍历代码如下:
public class HashMapTraverseTest {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("小张", 39);
map.put("小李", 17);
map.put("小王", 34);
map.put("小赵", 16);
map.put("小马", 13);
map.put("小杨", 31);
//方式一:用keySet()方法
System.out.println("=============================方式一=============================");
for (String s : map.keySet()) {
System.out.println(s + "-" + map.get(s));
}
}
}
遍历Set集合时用增强for循环的写法。
运行结果如下:
方式二:用hashMap的entrySet方法获取所有键值对组成的集合,然后遍历该键值对集合即可。
Map接口中有一个内部接口interface Entry<K,V>,它提供了getKey()、getValue()、entrySet()等方法,一个Entry就代表一个键值对,getKey()方法要返回该键值对的键,getValue()方法要返回该键值对的值,entrySet要返回该map中所有键值对组成的集合。
HashMap类实现了Map接口,它有个静态内部类Node实现了Map接口的内部接口Map.Entry<K,V>,并重写了getKey()、getValue()、entrySet等方法。
hashMap中的每个键值对都对应一个Entry<K,V>对象,entrySet方法就是把hashMap中所有的键值对存到一个Set集合中返回。
此方式遍历代码如下:
public class HashMapTraverseTest {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("小张", 39);
map.put("小李", 17);
map.put("小王", 34);
map.put("小赵", 16);
map.put("小马", 13);
map.put("小杨", 31);
//方式二:用entrySet()方法
System.out.println("=============================方式二=============================");
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + "-" + entry.getValue());
}
}
}
运行结果如下: