use*_*551 7 java collections java-9
我正在尝试创建一个城市和温度的地图,但它正在抛出一个IllegalArgumentException.这是我正在做的事情:
Map<String, Integer> tempMap = Map.of("London", 13, "Paris", 17, "Amsterdam", 13,
"Madrid", 21, "Rome", 19, "London", 13, "Bonn", 14,
"Moscow", 7, "Barcelona", 20, "Berlin", 15);
Run Code Online (Sandbox Code Playgroud)
如果我逐个添加它们就没问题了:
Map<String, Integer> tempMap = new Hashmap<>(); // or LinkedHashMap
tempMap.put("London", 13);
tempMap.put("Madrid", 21);
tempMap.put("Moscow", 7);
// etc.
Run Code Online (Sandbox Code Playgroud)
为什么会这样?内容应该是不一样的吗?
use*_*551 11
为什么会这样?
因为实例化中有一个重复的键:"London".在一成不变的静态工厂的Map和Set不允许重复(映射条目是重复的,如果它的关键是重复的) -在创建期间不-因此根本没有.这种限制表现为抛出IllegalArgumentException.
虽然从技术上讲你没有做任何不兼容的事情,但是图书馆的作者认为这是一个(可能是复制粘贴)的错误.为什么要添加一个项目只是为了稍后覆盖几行?
这让我想到......
如果我逐个添加它们就没问题了
这就是你的想法,只有你可能没有意识到你的地图将包含少于你输入的1个条目.重复条目会覆盖前一个条目("最后一个胜利"规则).当因此发生错误时,会出现很多问号.出于这个原因,快速失败的方法有其优点(虽然我不会提倡它只是更好).
作为提示,在创建地图时,如果您将其格式化,则更容易看到其内容:
Map<String, Integer> tempMap = Map.of(
"London", 13,
"Paris", 17,
"Amsterdam", 13,
"Madrid", 21,
"Rome", 19,
"London", 13, // !
"Bonn", 14,
"Moscow", 7,
"Barcelona", 20,
"Berlin", 15
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
662 次 |
| 最近记录: |