A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐巍 黑马帝   /  2012-3-23 16:12  /  3244 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请看下面代码:
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);
        }
}

8 个回复

倒序浏览
本帖最后由 陈汉帆 于 2012-3-23 16:27 编辑

put方法再添加元素的同时会返回被添加位置的value值,如果那个位置本来为空,那么就方回null了,
当执行sop("put:"+map.put("01","tangwei"));时覆盖了"01"位置,这时返回原先这个位置的值linlin01
回复 使用道具 举报
是不是因为键值相同,被("01","tangwei") 给替换了
回复 使用道具 举报
哦,明白了,put()返回的是被替换的值,就是以前与 key 关联的值,如果没有针对 key 的映射关系,则返回 null,具体点说
put("01","linlin01"),之前01对应空值,返回空。
put("01","tangwei"),之前01对应linlin01,就输出linlin01
回复 使用道具 举报
  sop("put:"+map.put("01","linlin01"));//添加键值为"01","linlin01",打印结果为null,为什么?

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

因为以前你的键01 所对应的value为空所以打印的时候会为null  当你第二次为键01赋值的时候它将返回时第一次的value值
回复 使用道具 举报
刘元霄 黑马帝 2012-3-23 16:39:46
7#
  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被替换时候 会返回替换之前的值!
回复 使用道具 举报
map集合使用put方法添加元素时可以注意两个细节:1.如果集合中已经有了要添加的键,那么后添加的那个键对应的值将会覆盖前一个值;
2.调用put方法后返回的是这个键以前对应的那个值,如果这个键之前不存在就会返回null。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马