目录
一、entry()(Map.Entry)和entrySet()方式遍历map集合
Map集合遍历
一、entry()(Map.Entry)和entrySet()方式遍历map集合,代码如下:
public class MapTraversalDemo {
public static void main(String[] args) {
// 创建map集合,插入数据
Map<Integer, String> map = new HashMap<>();
map.put(1, "Java");
map.put(2, "C++");
map.put(3, "C");
System.out.println(map);
// 使用map.entrySet和map.entry遍历
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println("key:" + entry.getKey() + ";" + "value:" + entry.getValue());
}
}
}
输出结果:
static <K,V> Map.Entry<K,V> entry(K k, V v)
映射项(键-值对)。Map.entrySet 方法返回映射的 collection 视图,其中的元素属于此类。获得映射项引用的唯一 方法是通过此 collection 视图的迭代器来实现。这些 Map.Entry 对象仅 在迭代期间有效;更确切地讲,如果在迭代器返回项之后修改了底层映射,则某些映射项的行为是不确定的,除了通过 setValue 在映射项上执行操作之外
Set<Map.Entry<K,V>> entrySet()
返回此映射中包含的映射关系的 Set 视图。该 set 受映射支持,所以对映射的更改可在此 set 中反映出来,反之亦然。如果对该 set 进行迭代的同时修改了映射(通过迭代器自己的 remove 操作,或者通过对迭代器返回的映射项执行 setValue 操作除外),则迭代结果是不确定的。set 支持元素移除,通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作可从映射中移除相应的映射关系。它不支持 add 或 addAll 操作。
二、keyset方法遍历
map.keySet():返回map集合里的key组成的set集合。在利用key值得到对应的value。
public class MapTraversalDemo {
public static void main(String[] args) {
// 创建map集合,插入数据
Map<Integer, String> map = new HashMap<>();
map.put(1, "Java");
map.put(2, "C++");
map.put(3, "C");
System.out.println(map);
// 使用keySet方法:
for (Integer key : map.keySet()) {
System.out.println("key :" + key + " ; " + "value : " + map.get(key));
}
}
}
运行结果:
{1=Java, 2=C++, 3=C}
key :1 ; value : Java
key :2 ; value : C++
key :3 ; value : C
三、使用迭代器iterator的遍历
有两种情况:
1、利用map.keySet()方法先创建一个迭代器对象,这个对象的构成元素是map.keySet()方法返回的key。iterator.hasNext()判断迭代中是否还有值,iterator.next()返回下一个迭代中的下一个元素。
public class MapTraversalDemo {
public static void main(String[] args) {
// 创建map集合,插入数据
Map<Integer, String> map = new HashMap<>();
map.put(1, "Java");
map.put(2, "C++");
map.put(3, "C");
System.out.println(map);
// 使用迭代器iterator进行遍历:map.keySet()
Iterator<Integer> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
Integer key = iterator.next();
System.out.println("key : " + key + ";" + "value :" + map.get(key));
}
}
}
运行结果:
{1=Java, 2=C++, 3=C}
key : 1;value :Java
key : 2;value :C++
key : 3;value :C
2、不难发现,这种方法与第一种(顶部)其实只是多了一个迭代器的引用而已。
public class MapTraversalDemo {
public static void main(String[] args) {
// 创建map集合,插入数据
Map<Integer, String> map = new HashMap<>();
map.put(1, "Java");
map.put(2, "C++");
map.put(3, "C");
System.out.println(map);
// 使用迭代器iterator进行遍历:map.entrySet()
Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator();
while (iterator.hasNext()){
Map.Entry<Integer, String> entry = iterator.next();
System.out.println(entry);
}
}
}
运行结果:
{1=Java, 2=C++, 3=C}
1=Java
2=C++
3=C