HashMap初始化的时候赋值

引用:HashMap初始化的时候赋值(*)

文章目录

Java中的HashMap是一种常用的数据结构,一般用来做数据字典或者Hash查找的容器。
一般我们初始化并赋值是这样做的:

HashMap<String, Object> map = new HashMap<>();
map.put("name", "yanggb"); 
map.put("name1", "huangq");

但是有时候我们会想在一个表达式中完成初始化并赋值的操作:

HashMap<String, Object> map = new HashMap<>() {    
{        put("name", "yanggb");        put("name1", "huangq");    }};

这里用了双括号【{{}}】来初始化,使代码简洁易读。第一层括弧实际是定义了一个匿名内部类 (Anonymous Inner Class),第二层括弧实际上是一个实例初始化块 (Instance Initializer Block),这个块在内部匿名类构造时被执行。这种写法的好处很明显,就是一目了然。但是这种写法可能导致这个对象串行化失败的问题。

  1. 因为这种方式是匿名内部类的声明方式,所以引用中持有着外部类的引用。所以当串行化这个集合时,外部类也会被不知不觉的串行化,而当外部类没有实现Serialize接口时,就会报错。
  2. 在上面的例子中,其实是声明了一个继承自HashMap的子类,然而有些串行化方法,例如要通过Gson串行化为json,或者要串行化为xml时,类库中提供的方式,是无法串行化Hashset或者HashMap的子类的,也就导致了串行化失败。解决办法是重新初始化为一个HashMap对象【new HashMap(map);】,这样就可以正常进行初始化了。

另外要注意的是,这种使用双括号进行初始化的语法在执行效率上要比普通的初始化写法要稍低。

最后,这个使用双括号进行初始化的语法同样适用于ArrayList和Set等集合。

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HashMap是一种Java中的数据结构,可以实现快速查找和存储。为了使用HashMap在程序中存储数据,需要进行初始化赋值操作。 在初始化HashMap之前,需要考虑三个重要的因素:容量、负载因子和初始容量。容量是HashMap能够容纳的最大元素数量。负载因子表示HashMap中实际元素数量与容量的比率。初始容量是在创建HashMap时使用的初始空间大小。 在Java中,可以通过以下方式初始化HashMapHashMap<String, Integer> map = new HashMap<>(); 这行代码使用了泛型,指定了HashMap的key(String类型)和(Integer类型)。 为了进行写入操作,需要使用put()方法来将键对添加到HashMap中。例如: map.put("apple", 3); map.put("orange", 2); map.put("banana", 1); 这些代码行将添加三个键对到HashMap中,其中键是字符串,是整数。 在进行读取操作时,可以使用get()方法来获取HashMap中的。例如: int numApples = map.get("apple"); 这行代码将获取哈希表中“apple”键对应的。 对于初始化完成的HashMap,可以通过遍历所有元素来获取其所有键对、键或。例如: for (String key : map.keySet()) { System.out.println(key + ": " + map.get(key)); } 这些代码行将输出HashMap中的每个键和。 总之,通过初始化赋值,可以创建一个可以快速读取和保存键对的HashMap。在不同的Java程序中,可以根据需要更改容量、负载因子和初始容量,以实现最佳性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值