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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© SenGoo 中级黑马   /  2014-10-23 10:50  /  1441 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

以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);

评分

参与人数 1黑马币 +2 收起 理由
nerveva2000 + 2 赞一个!

查看全部评分

8 个回复

倒序浏览
很给力。。。
回复 使用道具 举报

:lol也是刚刚发现的。
回复 使用道具 举报
感觉很好,酷
回复 使用道具 举报

:@留下买路财!
回复 使用道具 举报

我的技术分瞬间多了好多的
回复 使用道具 举报
解释一下串行化
回复 使用道具 举报
皮三藏 来自手机 中级黑马 2014-10-23 15:54:09
8#
从性能上来说,文艺写法并不占优势
回复 使用道具 举报
SenGoo 中级黑马 2014-10-23 16:45:47
9#
皮三藏 发表于 2014-10-23 15:54
从性能上来说,文艺写法并不占优势

个人理解是按顺序取出元素或者排队等候!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马