java中map put方法的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中map put方法的问题相关的知识,希望对你有一定的参考价值。

public static void main(String[] args)
Map<String, List<String>> map = new HashMap<String, List<String>>();
map.put("1", null);
List<String> list1 = map.get("1");
if (list1 == null)
list1 = new ArrayList<String>();
//map.put("1", list1);

System.out.println(map.get("1"));

上述代码,为什么必须添加注释的那一行代码。我的印象中 list1 拿出来后应该就是一个“指针”了啊,还需要在map中put回去吗?
ps:
放开这一句 map.put("1", list1); 打印:[ ]
注释掉这一句 map.put("1", list1); 打印:null

public static void main(String[] args) 

    Map<String, List<String>> map = new HashMap<String, List<String>>();
    map.put("1", null);  

    List<String> list1 = map.get("1");//存入的是null  取出来肯定也是null ,不管赋给哪个引用变量
     if (list1 == null) 
//所以这个判断一定会进入 
      list1 = new ArrayList<String>();//这里是把list1指向   一个  ArrayList对象  
 //map.put("1", list1);//把指向的ArrayList对象存入
 
    System.out.println(map.get("1"));//再取出打印 

 
放开这一句 map.put("1", list1);  打印:[ ]   是因为ArrayList对象是没元素的,toString打印就是[]

注释掉这一句 map.put("1", list1);  打印:null  是因为list1指向的是null

参考技术A 你刚开始就map.put("1", null)了,如果不放开注释就是null,放开的话map重新map.put("1", list1);给1的位置放了一个空的list集合对象,这个对象元素是空的,自己本身不是空的(开辟内存空间了) 参考技术B list1 = new ArrayList<String>();仔细考虑这条语句。这条语句是你重新创建一个新的List所以你put一个list1和不put是有区别的! 参考技术C Map<String, List<String>> map = new HashMap<String, List<String>>();
map.put("1", null);
List<String> list1 = map.get("1");
if (list1 == null)
list1 = new ArrayList<String>();
System.out.println(list1); // 这个list1 new 出来后就是 []
//map.put("1", list1); //这里重新 map.put 因为键相同 ,会覆盖前面的那个

System.out.println(map.get("1"))
参考技术D 你注释掉那句话,key为1对应的value是初始化的list1所以是[],注释叼就是null、这个有什么冲突吗、

java中put()里的参数问题

Map m1=new HashMap();
m1.put("one",new Integer(1));
右边的value值加个new是什么意思? 为什么看到有些程序可以m1.put("one",freq(常数));
右边的value值到底要是一个常数还是对象?

put 第一个是key ,第二个是value,
value加个new,表示新建一个对象放入到map中,仅仅是一个做法而已。
右边要求一个对象,至于freq(常数),只是调用freq方法,把freq的返回值作为value而已。追问

右边要求一个对象 那为什么返回的值还可以放进去呢?莫非那个返回值也可称作一个对象?

追答

返回值当然可以是对象。

参考技术A 要一个对象。
但jdk5以后有autoboxing功能,也就是如果方法需要的是对象,你传入的是int,它会自动帮你转成Integer。double转成Double,以此类推。本回答被提问者采纳
参考技术B Map<String, String> m1=new HashMap<String, String>();
Map<String, Integer> m1=new HashMap<String, Integer>();
Map<Integer, Integer> m1=new HashMap<Integer, Integer>();
Map<Integer, String> m1=new HashMap<Integer, String>();

以上是关于java中map put方法的问题的主要内容,如果未能解决你的问题,请参考以下文章

java里面 put方法的问题

Java Map接口中put方法的问题?

java map .put 方法

java中put()里的参数问题

关于java中HashMap的put方法中的参数问题

Java中对象作map的键,put的时不能覆盖原值