1、HashMap 初始化的文艺写法

HashMap 是一种常用的数据结构,一般用来做数据字典或者 Hash 查找的容器。普通青年一般会这么初始化:

HashMap map = new HashMap();

map.put("name", "test");

map.put("age", "20");

看完这段代码,很多人都会觉得这么写太啰嗦了,文艺青年一般这么来了:

HashMap map = new HashMap() {

{

map.put("name", "test");

map.put("age", "20");

}

};

看起来优雅了不少,一步到位,一气呵成的赶脚。然后问题来了,这里的双括号”{{}}”到底什么意思,什么用法呢?

双括号”{{}}”,用来初始化,使代码简洁易读。

第一层括弧实际是定义了一个匿名内部类 (Anonymous Inner Class),第二层括弧实际上是一个实例初始化块 (instance initializer block),这个块在内部匿名类构造时被执行。

2、推而广之,可初始化ArrayList、Set

List names = new ArrayList() {

{

for (int i = 0; i < 10; i++) {

add("A" + i);

}

}

};

System.out.println(names.toString());

3、Java7:增加对collections的支持

在 Java 7 中你可以像 Ruby, Perl、Python 一样创建collections了, 但是这些集合是不可变的。

List list = ["item"];

String item = list[0];

Set set = {"item"};

Map map = {"key" : 1};

int value = map["key"];

4、文艺写法的潜在问题

文章开头提到的文艺写法的好处很明显就是一目了然。这里来罗列下此种方法的坏处,如果这个对象要串行化,可能会导致串行化失败。

1.此种方式是匿名内部类的声明方式,所以引用中持有着外部类的引用。所以当时串行化这个集合时外部类也会被不知不觉的串行化,当外部类没有实现serialize接口时,就会报错。

2.上例中,其实是声明了一个继承自HashMap的子类。然而有些串行化方法,例如要通过Gson串行化为json,或者要串行化为xml时,类库中提供的方式,是无法串行化Hashset或者HashMap的子类的,从而导致串行化失败。解决办法:重新初始化为一个HashMap对象:

new HashMap(map);

这样就可以正常初始化了。

5、执行效率问题

当一种新的工具或者写法出现时,猿们都会来一句:性能怎么样?(这和男生谈论妹纸第一句一般都是:“长得咋样?三围多少?”一个道理:))

关于这个两种写法我这边笔记本上测试文艺写法、普通写法分别创建 10,000,000 个 Map 的结果是 1217、1064,相差 13%。

public class Test {

public static void main(String[] args) {

long st = System.currentTimeMillis();

/*

for (int i = 0; i < 10000000; i++) {

HashMap map = new HashMap() {

{

put("name", "test");

put("age", "20");

}

};

}

System.out.println(System.currentTimeMillis() - st); // 1217

*/

for (int i = 0; i < 10000000; i++) {

HashMap map = new HashMap();

map.put("name", "test");

map.put("age", "20");

}

System.out.println(System.currentTimeMillis() - st); // 1064

}

}

map java 初始化赋值_Java 中 HashMap 初始化时赋值(示例代码)相关推荐

  1. java url类_Java中的URL类和示例 - Break易站

    URL类是Internet上任何可用资源的网关.类URL表示统一资源定位符,它是指向万维网上"资源"的指针.资源可以指向简单的文件或目录,也可以引用更复杂的对象,例如对数据库或搜索 ...

  2. java异常判断_Java异常退出条件的判断示例代码

    无论是功能性代码还是算法性代码,程序都是一系列流程的合集 既然是流程就分为:一般流程和异常流程: 一般流程保证了基本功能: 异常流程则是对程序稳定性的保证,不能因为一些非法输入,项目就挂了: 注意,布 ...

  3. java重新初始化吗_Java中为何已经重新赋值的变量在输出后会初始化?

    /*这是代码先定义变量用switch选择结构重新赋值后输出的变量却初始化了...*/importjava.util.Scanner;publicclass练习3{publicstaticvoidmai ...

  4. java 初始化顺序_Java中对象初始化顺序的详细介绍

    前言 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.最近我发现了一个有趣的问题,这个问题的答案乍一看下骗过了我的眼睛.看一下这三个类: package com ...

  5. java中取系统时间_JAVA中获取当前系统时间(示例代码)

    一. 获取当前系统时间和日期并格式化输出: import java.util.Date;import java.text.SimpleDateFormat; public class NowStrin ...

  6. java 左移负数_Java中的左移时的负数问题

    java 中的左移的运算符为< 但是使用的时候要注意符号位的问题,如下: public void shiftTest() { int n = 1; while (n != 0) { n = n ...

  7. JAVA程序设计计时器代码_Java中的定时器Timer使用示例代码详解

    一.类概述 Timer是一种定时器工具,用来在一个后台线程计划执行指定任务.它可以计划执行一个任务一次或反复多次. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务. 二.代码 ...

  8. Java Singleton类中的线程安全性的示例代码

    Java Singleton类中的线程安全性的示例代码 Singleton是最广泛使用的创建设计模式之一,用于限制应用程序创建对象.在实际应用程序中,数据库连接或企业信息系统(EIS)等资源是有限的, ...

  9. python停止线程池_详解python中Threadpool线程池任务终止示例代码

    需求 加入我们需要处理一串个位数(0~9),奇数时需要循环打印它:偶数则等待对应时长并完成所有任务:0则是错误,但不需要终止任务,可以自定义一些处理. 关键点 定义func函数处理需求 callbac ...

最新文章

  1. 20145209 2016-2017-2 《Java程序设计》第8周学习总结
  2. java链接mysql数据库格式_JDBC URL连接常用数据库格式
  3. 科研狗的国庆与普通人的国庆有什么不同?
  4. OpenGL shader class自定义着色器的实例
  5. tensorflow 滑动平均使用和恢复
  6. 差距50倍!为什么Web API第一次执行这么慢?
  7. PHP登录表单提交前端验证,form表单提交前先用ajax进行验证(前端)
  8. 【git 基础】detached HEAD意义详解 (非顶端分支的理解)
  9. dataearth可视域分析_在线三维实景建模及分析
  10. Python 3 的新特性zz
  11. Android调用系统照相机
  12. activity 生命周期_Activity 源码解析
  13. python数据存储系列教程——python中mongodb数据库操作:连接、增删查改、多级路径
  14. 141.PHP 对象赋值
  15. 免费开源字体_7种华丽的免费开源字体以及何时使用它们
  16. Kali系统学习:弱点扫描工具NMAP实战演示
  17. 什么是数据标准化、中心化、归一化?SPSS又如何实现?
  18. IdentityServer4之Clients、Scopes、Claims与Token关联
  19. 林轩田机器学习基石--The Learning Problem
  20. spring boot日志配置文件(彩色日志)logback-spring.xml

热门文章

  1. tcpreplay工具安装使用
  2. idea导入java项目步骤,idea与eclipse项目相互导入的过程(图文教程)
  3. php 脚本内存耗尽,php - 内存耗尽(最小脚本) - SO中文参考 - www.soinside.com
  4. java中输出打印 num_System.out.print。 如何将打印输出编号?(JAVA)
  5. Python微调文本顺序对抗朴素贝叶斯算法垃圾邮件分类机制
  6. 警惕Python编程中异常处理结构可能的坑
  7. 微课|玩转Python轻松过二级(2.2.4节):位运算符与集合运算符
  8. Python一句话实现秦九韶算法快速计算多项式的值
  9. Python模拟大整数乘法的小学竖式计算过程
  10. C++ 面向对象程序三大特性之 多态