How to directly initialize a Map/List/Set
Posted echo1937
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了How to directly initialize a Map/List/Set相关的知识,希望对你有一定的参考价值。
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的主要内容,如果未能解决你的问题,请参考以下文章
How to directly initialize a Map/List/Set
How to directly initialize a Map/List/Set
How do I force android WiFi Direct group owner to use 2.4 GHz instead of 5 GHz
Laravel文档阅读笔记-How to use @auth and @guest directives in Laravel
Laravel文档阅读笔记-How to use @auth and @guest directives in Laravel
Application MyTest has not been registered. This is either due to a require() error during initializ