黑马程序员技术交流社区

标题: 关于Map集合添加元素的问题 [打印本页]

作者: 唐巍    时间: 2012-3-23 16:12
标题: 关于Map集合添加元素的问题
请看下面代码:
import java.util.*;
class MapDemo
{
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
        public static void main(String[] args)
        {
                Map<String,String> map=new HashMap<String,String>();
                sop("put:"+map.put("01","linlin01"));//添加键值为"01","linlin01",打印结果为null,为什么?
                sop("put:"+map.put("01","tangwei"));
                sop(map);
        }
}

作者: 陈汉帆    时间: 2012-3-23 16:26
本帖最后由 陈汉帆 于 2012-3-23 16:27 编辑

put方法再添加元素的同时会返回被添加位置的value值,如果那个位置本来为空,那么就方回null了,
当执行sop("put:"+map.put("01","tangwei"));时覆盖了"01"位置,这时返回原先这个位置的值linlin01

作者: 张明星    时间: 2012-3-23 16:26
是不是因为键值相同,被("01","tangwei") 给替换了

作者: 张明星    时间: 2012-3-23 16:31
哦,明白了,put()返回的是被替换的值,就是以前与 key 关联的值,如果没有针对 key 的映射关系,则返回 null,具体点说
put("01","linlin01"),之前01对应空值,返回空。
put("01","tangwei"),之前01对应linlin01,就输出linlin01
作者: 刘元霄    时间: 2012-3-23 16:32
  sop("put:"+map.put("01","linlin01"));//添加键值为"01","linlin01",打印结果为null,为什么?

V    put(K key, V value)
          在此映射中关联指定值与指定键。
put的返回值类型 是  V   
而你这样并不是 输出  01 和 linlin01   这只是添加元素  而元素添加到Map集合里了, 而你打印put  肯定就是空了。
作者: 冯建鹏    时间: 2012-3-23 16:37
Map的 put方法是将指定的值与此映射中的指定键关联,如果此映射以前包含一个该键的映射关系,则用指定值替换旧值。
返回值:
以前与 key 关联的值,如果没有针对 key 的映射关系,则返回 null

因为以前你的键01 所对应的value为空所以打印的时候会为null  当你第二次为键01赋值的时候它将返回时第一次的value值
作者: 刘元霄    时间: 2012-3-23 16:39
  sop("put:"+map.put("01","linlin01"));//添加键值为"01","linlin01",打印结果为null,为什么?

V    put(K key, V value)
          在此映射中关联指定值与指定键。
put的返回值类型 是  V   
而你这样并不是 输出  01 和 linlin01   这只是添加元素  而元素添加到Map集合里了, 而你打印put  肯定就是空了。

当你第二次put添加的时候  同一个键的值被替换了 ,所以会打印出替换前的 值! 总体来说  你必须得明白返回值类型。  
  put的返回值 是V     所以 你输出put的时候肯定是一个值 而不是键值对。

  你去毕老师这一课听听你就明白了  put被替换时候 会返回替换之前的值!
作者: 刘元明    时间: 2012-3-23 16:51
map集合使用put方法添加元素时可以注意两个细节:1.如果集合中已经有了要添加的键,那么后添加的那个键对应的值将会覆盖前一个值;
2.调用put方法后返回的是这个键以前对应的那个值,如果这个键之前不存在就会返回null。




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