Java的List和Map作为入参与clone
来源:互联网 发布:淘宝网韩版卫衣 编辑:程序博客网 时间:2024/04/30 09:03
代码
public static void main(String[] args) { testList(); } /** * 测试HashMap是否需要clone * * 1、你觉得,print出来的id是1还是2呢? * 2、list的size是1还是2呢?每一个的map的id是1还是2? * 3、id会不会是4呢? * * @since 2015.7.12 */ private static void testList() { List<Map<String, String>> list = new ArrayList<Map<String, String>>(); Map<String, String> map = new HashMap<String, String>(); map.put("id", "1"); list.add(map); testMap(list); System.out.println("1、=========== id=" + list.get(0).get("id")); testMap2(list); System.out.println("2、=========== size=" + list.size()); System.out.println("id="+list.get(0).get("id")); System.out.println("id="+list.get(1).get("id")); testMap3(list); System.out.println("3、=========== id=" + list.get(0).get("id")); } private static void testMap(List<Map<String, String>> list) { Map<String, String> map = list.get(0); map.put("id", "2"); } private static void testMap2(List<Map<String, String>> list) { Map<String, String> map = list.get(0); map = new HashMap<String, String>(); map.put("id", "3"); list.add(map); } private static void testMap3(List<Map<String, String>> list) { Map<String, String> map = (Map<String, String>) ((HashMap<String, String>) list.get(0)).clone(); map.put("id", "4"); }
答案
- 2
- 2、2、3
- 2
原因
list作为入参,传的其实是引用。那进入方法里修改的也是该引用。
要解决这个问题,有两个方法。一个是使用clone,一个是new一个新的对象1。然后把修改后的list作为出参return回去,这样才不影响入参。
需要注意的是List和Map都是接口,是没有clone的。ArrayList和HashMap才有clone,而且是浅拷贝,而不是深拷贝2。
ps:以前对Map烂熟,现在啥都不记得了。两年没怎么写Java,就连&和&&该用哪个都不知道了:
永远不要离代码太远。不然,你离技术也越来越远了。
转载请标明出处:
本文出自:【ouyida3的博客】
2015.7.12
0 0
- Java的List和Map作为入参与clone
- java的map和list的操作
- java 集合list和map的用法
- list作为map使用
- springMVC中使用List和Map绑定对象作为参数的使用方法
- Java 泛型List clone
- Java泛型List clone
- java 中 Map 和 List
- Dom4j解析XML文本,遍历指定节点下的节点内容和属性,并存入List<Map<String,Object>
- Java集合类 List/Set/Map... 的区别和联系
- java中list、set和map 的区别
- java中list、set和map 的区别
- java中set、list和map的区别
- java中list、set和map 的区别
- java中list、set和map 的区别
- java中list,set和map 的区别
- java中list、set和map 的区别
- 介绍java中list,set和map 的区别
- Remove Linked List Elements -- leetcode
- bzoj-2243 染色
- Kademlia算法
- 迭代是人,递归是神(迭代与递归的总结:比较)
- 易语言如何写一个取随机数的程序
- Java的List和Map作为入参与clone
- Fail Fast与Fail Safe的区别
- java List 排序 Collections.sort() 对 List 排序
- sourceTree 切换Git登录用户
- 工作四年
- AsyncTask的缺陷
- sobel gaussin laplace canny等opencv测试
- java短信生成6位数的校验码
- iOS-UITextView 的收起键盘及动态大小