栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何直接初始化HashMap(以文本方式)?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何直接初始化HashMap(以文本方式)?

所有版本

如果你碰巧只需要一个条目:有

Collections.singletonMap("key", "value")

对于Java版本9或更高版本:

是的,现在有可能。在Java 9中,添加了一些工厂方法来简化地图的创建:

// 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"));

在上面的示例中,两者

test
test2
相同,只是表达地图的方式不同。
Map.of
最多可为地图中的十个元素定义该方法,而该
Map.ofEntries
方法没有此限制。

请注意,在这种情况下,生成的地图将是不可变的地图。如果你希望地图可变,则可以再次复制它,例如使用

mutableMap = new HashMap<>(Map.of("a", "b"));

(另请参见JEP 269和Javadoc)

对于Java版本8:

不,你将必须手动添加所有元素。你可以在匿名子类中使用初始化程序,以使语法短一些:

Map<String, String> myMap = new HashMap<String, String>() {{        put("a", "b");        put("c", "d");    }};

但是,在某些情况下,匿名子类可能会引入不需要的行为。例如,这包括:

  • 它会生成一个附加类,从而增加内存消耗,磁盘空间消耗和启动时间
  • 对于非静态方法:它包含对创建方法所调用的对象的引用。这意味着在仍然引用创建的map对象的同时,无法对外部类的对象进行垃圾回收,从而阻塞了额外的内存
    使用函数进行初始化还将使你能够在初始化程序中生成映射,但避免了讨厌的副作用:
Map<String, String> myMap = createMap();private static Map<String, String> createMap() {    Map<String,String> myMap = new HashMap<String,String>();    myMap.put("a", "b");    myMap.put("c", "d");    return myMap;}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/447058.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号