我试图创建一个城市和温度的地图,但它正在投掷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);
如果我逐一添加它们就没有问题:
Map<String, Integer> tempMap = new Hashmap<>(); // or LinkedHashMap
tempMap.put("London", 13);
tempMap.put("Madrid", 21);
tempMap.put("Moscow", 7);
// etc.
为什么会这样? Aren的内容应该是一样的吗?
答案 0 :(得分:11)
为什么会这样?
因为您的实例化中有一个重复的密钥:"London"
。 Map
和Set
的{{3}}不允许重复(如果地图条目的密钥重复,则地图条目重复) - 不在创建时间内 - 因此根本不重复。抛出IllegalArgumentException
。
虽然从技术上讲你没有做任何不兼容的事情,但是图书馆的作者认为它是一个(可能是复制粘贴)错误。为什么要添加一个项目只是为了稍后覆盖几行?
这让我想到......
如果我逐一添加它们就没有问题
您的想法是,只有您可能没有意识到您的地图将包含少于您输入的1个条目。重复条目会覆盖前一个条目(&#34;最后一个胜出&#34;规则)。当因此发生错误时,会出现很多问号。出于这个原因,故障快速方法有其优点(虽然我不能提倡它,但更好)。
作为提示,在创建地图时,如果您对其进行格式化,则可以更轻松地查看其内容:
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
);
答案 1 :(得分:3)