Map集合的entrySet()方法

之前学习集合的时候要通过迭代器来迭代的时候最难得就是map集合得迭代,一直也不太明白,今天总算搞懂了

首先我们看什么容器才能迭代

根据API我们得知是对所有collection迭代的集合,那么已知的collection容器有哪些

Map集合的entrySet()方法_第1张图片

我把常用的标出了,我们接着看这些能容器如何迭代我们点进去,发现了collection容器有两种情况

第一:

拥有一个返回类型为Iterator的方法,我们通过这个方法得到迭代器

第二:Map集合的entrySet()方法_第2张图片

实现了Iterable接口,看看你这个接口

Map集合的entrySet()方法_第3张图片

那么我们也可以调用这个方法拿到迭代容器迭代器。

但是我们发现collection接口的子接口没有Map接口,那么我们无法通过Map来直接获取迭代器。

接下来就是我们的重点了:

实现方法:

我们发现在Map集合中有这么一个方法:


我们先不要管Map.Entry,看起来它就是一个泛型,对我们影响不大。

集体看下这个方法的描述:

Map集合的entrySet()方法_第4张图片

返回此映射中包含的映射关系的 Set 视图。该 set 受映射支持,所以对映射的更改可在此 set 中反映出来,反之亦然。如果对该 set 进行迭代的同时修改了映射(通过迭代器自己的 remove 操作,或者通过对迭代器返回的映射项执行 setValue 操作除外),则迭代结果是不确定的。set 支持元素移除,通过 Iterator.removeSet.removeremoveAllretainAllclear 操作可从映射中移除相应的映射关系。它不支持 addaddAll 操作。

返回:
此映射中包含的映射关系的 set 视图

我们发现返回一个set集合,并且这个set可以对映射支持,就是你在map集合的改动,在这个set集合中也可以反映出来

那么就是说这个方法把我们的map的每个键值对都当作一个对象存入了set集合中。那么我们就可以用set集合来迭代这个map的所有值。

我们发现这个方法返回类型的泛型是Map.Entry,我们看下是什么。


看下Entry的接口说明

接口 Map.Entry
所有已知实现类: 
AbstractMap.SimpleEntry, AbstractMap.SimpleImmutableEntry 
正在封闭接口:
Map 


public static interface Map.Entry映射项(键-值对)。Map.entrySet 方法返回映射的 collection 视图,其中的元素属于此类。获得映射项引用的唯一 方法是通过此 collection 视图的迭代器来实现。这些 Map.Entry 对象仅 在迭代期间有效;更确切地讲,如果在迭代器返回项之后修改了底层映射,则某些映射项的行为是不确定的,除了通过 setValue 在映射项上执行操作之外。


用了entry

    

Map map=new HashMap();//这样没有问题
		map.put(1, 1);
        Set set = map.entrySet();	
       Iterator it=set.iterator();
        while(it.hasNext()) {
        	Entry map1=it.next();
        	System.out.println(map1);
        }
        for(Entry en:set)
        {
        	System.out.println(en);
        	System.out.println(en.getKey());
        	System.out.println(en.getValue());
        }

没用entry

	public static void main(String[] args) throws CloneNotSupportedException {
		Map map=new HashMap();
		map.put(1, 1);
        Set set = map.entrySet();	
       Iterator it=set.iterator();
        while(it.hasNext()) {
        	Object map1=it.next();
        	System.out.println(map1);
        }
        for(Object en:set)
        {
        	System.out.println(en);
        
        } 
	}

这两种方法都可以,只是第一种规定了Entry泛型,这个泛型对象相当于包装了键值对的对象,用这个对象可以使用里面的getKey和getValue方法,所以我们使用这个泛型对map操作

也就是说entrySet返回一个保存键值对的set集合,如果设置这个set对象接受的对象类型是Entry类型,那么可以使用Entry接口里的getKey和getValue方法。也就是Entry接口实例化的类的对象可以用来更好的操作map类型

你可能感兴趣的:(Map集合的entrySet()方法)