所有分类
  • 所有分类
  • 未分类

Java之HashMap-创建并初始化成员的方法

简介

本文介绍创建HashMap并初始化一些成员的方法。

法1:匿名内部类

HashMap<String, String> map = new HashMap<String, String>() {{
        put("name", "test");  
        put("age", "20"); 
    }};

缺点

1.内存泄露隐患

非静态内部类/ 匿名内部类包含了外围实例的引用, 如果拥有比 外部类更长的生命周期,有内存泄露隐患。

2.如果这个对象要串行化,可能会导致串行化失败。

  1. 此种方式是匿名内部类的声明方式,所以引用中持有着外部类的引用。所以当时串行化这个集合时外部类也会被不知不觉的串行化,当外部类没有实现serialize接口时,就会报错。
  2. 上例中,其实是声明了一个继承自HashMap的子类。然而有些串行化方法,例如要通过Gson串行化为json,或者要串行化为xml时,类库中提供的方式,是无法串行化Hashset或者HashMap的子类的,从而导致串行化失败。

解决办法

重新初始化为一个HashMap对象:

HashMap<String, String> map = new HashMap<String, String>() {{
        put("name", "test");  
        put("age", "20"); 
    }};
HashMap<String, String> newMap = new HashMap(map);

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

法2:静态方法

public class Demo{
    private static final Map<String, String> myMap;
    static {
        myMap = new HashMap<String, String>();
        myMap.put("a", "b");
        myMap.put("c", "d");
    }
}

法3:第三方包Guava

Map<String, Integer> left = ImmutableMap.of("a", 1, "b", 2, "c", 3);
//或者
Map<String, String> test = ImmutableMap.<String, String>builder()
    .put("k1", "v1")
    .put("k2", "v2")
    ...
    .build();
0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录