JAVA Map 六大遍历方式
前置知识:
-
containsKey:查找键是否存在
-
keySet:获取所有的键
-
entrySet:获取所有的关系
-
values:获取所有的值
增强for循环可以代替Iterator迭代器,可以把它看做简化版的Iterator,和迭代器本质一样,它的底层实现就是Iterator迭代器,只能用于遍历集合或数组。
map存放数据示意图如下(存放在HashMap $ Node中):keySet、values、entrySet指向hashMap$Node,存放在这些集合中便与后续遍历。
Map遍历第一种
//--------------第1种--------------通过keySet集合取元素
//先取出所有的key,通过key取出对应的value
//增强for循环
for (Object key : map.keySet()) {
System.out.println(key + "-" + map.get(key));
}
Map遍历第二种
//--------------第2种--------------通过keySet集合取元素
//迭代器
Set keyset = map.keySet();
Iterator it = keyset.iterator();
while (it.hasNext()) {
Object key = it.next();
System.out.println(key + "-" + map.get(key));
}
/*
在迭代器的遍历过程中先通过hastNext()方法判断是否有下一个元素,如果存在下一个元素再调用next()方法获取元素,在这里next()方法先往后移动一个元素位置,再返回该位置的元素。因此,在调用next()方法之前必须要调用hastNext()方法进行检测;如果没有调用并且没有下一个元素,直接调用next()方法会抛出 NoSuchElementException异常。
*/
Map遍历第三种
//--------------第3种--------------通过values集合取元素
//增强for循环
for (Object value : map.values()) {
System.out.println(value);//取出所有value
}
Map遍历第四种
//--------------第4种--------------通过values集合取元素
//迭代器
Collection values = map.values();
Iterator it = values.iterator();
while (it.hasNext()) {
Object value = it.next();
System.out.println(value);//取出所有value
}
Map遍历第五种
//--------------第5种--------------通过entrySet集合取元素
//增强for循环
for (Map.Entry<K, V> entry : map.entrySet()) {
System.out.println(entry.getKey() + "-" + entry.getValue());
}
Map遍历第六种
//--------------第6种--------------通过entrySet集合取元素
//迭代器
Set entrySet = map.entrySet();//EntrySet<Map.Entry<K,V>>
Iterator it = entrySet.iterator();
while (it.hasNext()) {
Object entry = it.next();
Map.Entry m = (Map.Entry) entry;//向下转型
System.out.println(m.getKey() + "-" + m.getValue());
}