黑马程序员技术交流社区

标题: Java中Collection集合初始化之文艺写法! [打印本页]

作者: SenGoo    时间: 2014-10-23 10:50
标题: Java中Collection集合初始化之文艺写法!
以HashMap为例:一般我们初始化集合的方法为:
  1. HashMap<String, String> map =new HashMap<String, String>();
  2. map.put("Name", "June");
  3. map.put("QQ", "2572073701");
复制代码
文艺写法为:


  1. HashMap<String, String> map =new HashMap<String, String>() {
  2.   {
  3.     put("Name", "June");
  4.     put("QQ", "2572073701");
  5.   }
  6. };
复制代码
不难发现采用的是匿名类的形式:第一层括弧实际是定义了一个匿名内部类,第二层括弧实际上是一个实例初始化块这种写法.

在初始化 ArrayList、Set 的时候都可以这么玩:
  1. List<String> names = new ArrayList<String>() {
  2.   {
  3.     for (int i = 0; i < 10; i++) {
  4.      add("A" + i);
  5.     }
  6.   }
  7. };
  8. System.out.println(names.toString()); // [A0, A1, A2, A3, A4, A5, A6, A7, A8, A9]
复制代码
文艺写法好处:可以提高代码的执行效率
弊端:如果这个对象要串行化,可能会导致串行化失败。因为此种方式是匿名内部类的声明方式,所以引用中持有着外部类的引用。           所以当串行化这个集合时外部类也会被不知不觉的串行化,当外部类没有实现serialize接口时,就会报错。
解决办法:重新初始化一个集合对象,如:new HashMap(map);


作者: nerveva2000    时间: 2014-10-23 10:53
很给力。。。
作者: SenGoo    时间: 2014-10-23 10:55
nerveva2000 发表于 2014-10-23 10:53
很给力。。。

:lol也是刚刚发现的。
作者: xiaochongbojue    时间: 2014-10-23 11:28
感觉很好,酷
作者: SenGoo    时间: 2014-10-23 11:33
xiaochongbojue 发表于 2014-10-23 11:28
感觉很好,酷

:@留下买路财!
作者: 紫薰iy    时间: 2014-10-23 12:16
xiaochongbojue 发表于 2014-10-23 11:28
感觉很好,酷

我的技术分瞬间多了好多的
作者: Forever_Up    时间: 2014-10-23 15:25
解释一下串行化
作者: 皮三藏    时间: 2014-10-23 15:54
从性能上来说,文艺写法并不占优势
作者: SenGoo    时间: 2014-10-23 16:45
皮三藏 发表于 2014-10-23 15:54
从性能上来说,文艺写法并不占优势

个人理解是按顺序取出元素或者排队等候!




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