码迷,mamicode.com
首页 > 其他好文 > 详细

How to directly initialize a Map/List/Set

时间:2020-05-29 12:07:55      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:initial   cep   结果   测试   work   运行   list   需要   higher   

1. 只读的、单元素的容器类

Set<String> singleton = Collections.singleton("set");
List<String> singletonList = Collections.singletonList("List");
Map<String, String> singletonMap = Collections.singletonMap("key", "value");
// 以上返回的容器类均是immutable,即只读的,如果调用修改接口,将会抛出UnsupportedOperationException

 

方法二:

For Java Version 9 or higher:
// this works for up to 10 elements:
Map<String, String> test1 = Map.of(
        "a", "b",
        "c", "d"
);

// this works for any number of elements:
import static java.util.Map.entry;
        Map<String, String> test2 = Map.ofEntries(
                entry("a", "b"),
                entry("c", "d")
        );


// 以上返回的test1和test2依然是immutable,即只读的,如果需要返回可变的,可以使用以下方法
mutableMap = new HashMap<>(Map.of("a", "b"));


// 本人环境只有JDK8,未测试实际运行结果
For Java Version 8 or higher:
Map<String, String> map = new HashMap<String, String>() {{
    put("a", "b");
    put("c", "d");
}};

/*
    1. 它生成了一个额外的匿名类,这会带来额外的内存、磁盘和启动时间的消耗;
    2. 如果这个Map对象始终被引用,那么它的外部类也无法被垃圾回收,这也会带来额外的内存消耗;

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

// 解决办法,重新初始化为一个HashMap对象:
HashMap<String, String> newMap = new HashMap<>(map);

 

How to directly initialize a Map/List/Set

标签:initial   cep   结果   测试   work   运行   list   需要   higher   

原文地址:https://www.cnblogs.com/echo1937/p/12986542.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!