黑马程序员技术交流社区

标题: Map集合的两种获取方式的比较? [打印本页]

作者: liang926    时间: 2014-8-10 22:12
标题: Map集合的两种获取方式的比较?
本帖最后由 liang926 于 2014-8-14 00:36 编辑

  1. /*
  2. * Map集合的获取方式
  3. */
  4. import java.util.*;
  5. public class MapDemo1 {
  6.         public static void main(String[] args) {
  7.                 method();
  8.                 System.out.println("*******下面是 第二种entrySet()方法*********************");
  9.                 method_1();
  10.         }
  11.         /*
  12.          * 第二种entrySet()方法
  13.          */
  14.         private static void method_1(){
  15.                 Map<String,Integer> map = new HashMap<String,Integer>();
  16.                 map.put("a", 1);
  17.                 map.put("b", 2);
  18.                 map.put("c", 3);
  19.                 map.put("d", 4);
  20.                 //使用Map接口方法entrySet,获取键值对映射关系对象Entry,
  21.                 //对象存储到Set集合
  22.                 Set<Map.Entry<String, Integer>> set = map.entrySet();
  23.                 //迭代器,迭代Set集合
  24.                 Iterator<Map.Entry<String, Integer>> it = set.iterator();
  25.                 while(it.hasNext()){
  26.                         //it.next()获取出来的是什么,键值对映射关系Map.Entry
  27.                         Map.Entry<String, Integer> me = it.next();
  28.                         //利用键值对映射关系对象中的方法getKey getValue
  29.                         String key = me.getKey();
  30.                         Integer value = me.getValue();
  31.                         System.out.println(key+"....."+value);
  32.                 }
  33.                
  34.         }
  35.         
  36.         
  37.         /*
  38.          * 第一种keySet()方法
  39.          */
  40.         private static void method(){
  41.                 Map<String,Integer> map = new HashMap<String, Integer>();
  42.                 map.put("a", 1);
  43.                 map.put("b", 2);
  44.                 map.put("c", 3);
  45.                 map.put("d", 4);
  46.                
  47.                 Set<String> set = map.keySet();//ZZZ
  48.                 //迭代Set集合
  49.                 Iterator<String> it = set.iterator();
  50.                 while(it.hasNext()){
  51.                         
  52.                         String key = it.next();//it.next方法,返回的是String类,Map集合中的键
  53.                         
  54.                         Integer value = map.get(key);//通过Map集合的get()方法,传递键,获取值
  55.                         
  56.                         System.out.println(key+"...."+value);
  57.                         
  58.                 }
  59.         }
  60. }
复制代码


请问这两中方式各自的优缺点,在什么情况下用哪一种会比较合适?
我觉得KeySet()方法的代码能比entrySet的代码简洁些,KeySet()方法我更能接受,不知两者比较还有哪方面的优点,谢谢大家的指导!

作者: liqi    时间: 2014-8-10 22:25
看你的需求了,一个只能取出值,一个能取出键值对
作者: zhxu188    时间: 2014-8-10 22:37
相对来说keySet是比entrySet简洁点,其实用任何一个都一样,到目前为止还没遇到只能用一种的
作者: fantacyleo    时间: 2014-8-10 22:51
键值对在Map内部就是以Map.entry的形式存在的,对键值对的操作也就是对Map.entry的操作,包括你调用get方法,取出keySet,都离不开Map.Entry。所以,从效率上来说,Map.Entry会更高一些啦
作者: star5603    时间: 2014-8-11 09:14
我比较喜欢用Map.Entry。。。。
作者: 贾浩田    时间: 2014-8-12 10:54
这两种方法的最终目的就是获取键值对,用哪一个都行
作者: sdfe    时间: 2014-8-12 11:42
我觉得keyset要灵活一些。
作者: zhouqun    时间: 2014-8-12 21:28
我个人觉得没必要研究这么深
作者: Moriarty    时间: 2014-8-12 22:28
通过获得键的set集合和键值映射来实现的
作者: jackhai9    时间: 2014-8-12 22:32
看心情,追求效率的话用entry。
作者: 席杰    时间: 2014-8-12 22:52
entrySet比KeySet效率高




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2