必威体育Betway必威体育官网
当前位置:首页 > IT技术

Map集合的entrySet()方法

时间:2019-11-06 09:45:39来源:IT技术作者:seo实验室小编阅读:70次「手机版」
 

entryset

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

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

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

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

第一:

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

第二:

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

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

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

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

实现方法:

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

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

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

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

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

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

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

看下Entry的接口说明

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


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

用了entry

Map map=new HashMap();//这样没有问题
		map.put(1, 1);
        Set<Entry> set = map.entrySet();	
       Iterator<Entry> 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类型

文章最后发布于: 2018-07-05 09:47:01

相关阅读

论文解析 - SLAM++: Simultaneous Localisation and M

SLAM++: Simultaneous Localisation and Mapping at the Level of Objects 0. 论文概况 引用:331, CVPR2013 Renato F. Salas-Mor

produces在@requestMapping中的使用方式和作用

produces可能不算一个注解,因为什么呢,它是注解@requestMapping注解里面的属性项, 它的作用是指定返回值类型,不但可以设置返回值类型

准确率,召回率,mAP(mean average precision)解释

准确率Precision 召回率Recall 其实这个翻译相当蛋疼。。。 recall最合理的翻译应该是 查全率 而Precision的最合理的翻译应该是

Java WeakHashMap

作为一个java开发者肯定都知道且使用HashMap,但估计大部分人都不太知道WeakHashMap。从类定义上来看,它和普通的HashMap一样,继承了A

Hadoop:一文详解MapReduce的工作机制

在最新的Hadoop(2.7以上版本)中,我们在控制台已经找不到jobtracker和tasktracker模块了,这并不是说它们消失了,而是隐式的加入了YARN框

分享到:

栏目导航

推荐阅读

热门阅读