Map的取值方式详解

在Map集合中,有如下定义:
          values():方法是获取集合中的所有的值----没有键,没有对应关系,
          KeySet():将Map中所有的键存入到set集合中。因为set具备迭代器iterator()方法。所以可以使用迭代方式取出所有的键,接着根据get(key)方法。获取每一个键对应的值。 keySet():迭代后只能通过get(key)取值

 

          entrySet():Set<Map.Entry<K,V>> entrySet() //返回此映射中包含的映射关系的 Set 视图。 Map.Entry表示映射关系。entrySet():迭代后可以使用e.getKey(),e.getValue()分别取key值和value值。返回的是Entry接口 。

 

一、values()方法

下面通过例子看看:

 

 

 

  1. package sample;

  2. import java.util.*;

  3. class MapTestBrower

  4. {

  5. public static void main(String[] agrs)

  6. {

  7. HashMap<Integer,String> hm=new HashMap<Integer,String>();

  8. hm.put(1,"qqq");

  9. hm.put(2,"www");

  10. hm.put(5,"eee");

  11. hm.put(3,"rrr");

  12. hm.put(4,"ttt");

  13.  
  14. Collection<String> collection=hm.values();

  15. System.out.println(collection);//输出collection中的内容

  16. }

  17. }

输出结果如下所示:

由结果可以看出,values获得的结果中只有值而没有键

当然,我们也能够采用以下方式输出:

 

 
  1. Collection c=hm.values();

  2. for(Object o:c)

  3. {

  4. if(o.equals("李斯特"))

  5.  System.out.println(o);

  6. }

这样的话就可以进行对内容的检测了,如果有符合条件的,就可以进行操作了

 

 

 

二. keySet()方式。

 

 

Set<K> keySet() //返回值是个只存放key值的Set集合(集合中无序存放的)

 

 
  1. package sample;

  2. import java.util.*;

  3. class MapTestBrower

  4. {

  5. public static void main(String[] agrs)

  6. {

  7. HashMap<Integer,String> hm=new HashMap<Integer,String>();

  8. hm.put(1,"张无忌");

  9. hm.put(2,"李斯特");

  10. hm.put(5,"米老鼠");

  11. hm.put(3,"斗战胜佛");

  12. hm.put(4,"唐老鸭");

  13. Set<Integer> set=hm.keySet();//先获取Map集合中的所有键值,由于刚开始设定为Integer,所以使用泛型限定

  14. Iterator<Integer> it=set.iterator();//使用上面获取的set获取迭代器Iterator

  15. while(it.hasNext())//判断迭代器中向下是否还有元素

  16. {

  17. Integer temp=it.next();//获取键

  18. System.out.println(temp+" "+hm.get(temp));//输出键和对应的值

  19. }

  20. }

  21. }

 

 

结果如下所示:

 

三. entrySet()方式:

     Set<Map.Entry<K,V>> entrySet() //返回映射所包含的映射关系的Set集合(一个关系就是一个键-值对),就是把(key-value)作为一个整体一对一对地存放到Set集合当中的。

如下代码所示:

 

 
  1. package sample;

  2. import java.util.*;

  3. import java.util.Map.*;//导入Map.*包

  4. class MapTestBrower

  5. {

  6. public static void main(String[] agrs)

  7. {

  8. HashMap<Integer,String> hm=new HashMap<Integer,String>();

  9. hm.put(1,"张无忌");

  10. hm.put(2,"李斯特");

  11. hm.put(5,"米老鼠");

  12. hm.put(3,"斗战胜佛");

  13. hm.put(4,"唐老鸭");

  14. Set<Entry<Integer,String>> set=hm.entrySet();//通过entrySet()方法将map集合中的映射关系取出(这个关系就是Entry类型)

  15. Iterator<Entry<Integer,String>> it=set.iterator();//将关系集合entrySet进行迭代,存放到迭代器it中

  16. while(it.hasNext())

  17. {

  18. Entry<Integer,String> e=it.next();//获取Entry类型关系对象e

  19. System.out.println(e.getKey()+" "+e.getValue());//通过关系对象获取Key及值,并且进行输出

  20. }

  21. }

  22. }

结果如下所示(输出结果相同):

 


虽然使用keyset及entryset来进行遍历能取得相同的结果,但两者的遍历速度是有差别的
            keySet():迭代后只能通过get()取key 
            entrySet():迭代后可以e.getKey(),e.getValue()取key和value。返回的是Entry接口 

 

keySet()的速度比entrySet()慢了很多,也就是keySet方式遍历Map的性能不如entrySet性能好,为了提高性能,以后多考虑用entrySet()方式来进行遍历。

 

 

以上就是Map中取值的方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值