当我们Map<String,List<String>> = new HashMap<String, List<String>>();
时
它会创建一个空地图,但地图中的List
也是空的,还是空值?
答案 0 :(得分:1)
在某种程度上,这取决于您使用的集合类型。散列映射或散列集不会为稍后可能添加的对象分配任何空间。所以你只承担&#34;成本&#34;在创建它时准确地说明一个地图或设置对象。
而对于ArrayList,则不同 - 它们是使用初始容量创建的(默认情况下为10);这意味着创建ArrayList<String>
将为字符串数组(在这个意义上为String[10]
)分配。所以,HashMap<String, List<String>>
更便宜&#34;比List<Map<Whatever, NotOfInterest>>
。
另一方面:这真的不用担心。除非你在&#34;嵌入式计算&#34; (或者你一直在处理数百万个对象),你应该更担心好的OO设计而不是java集合的内存(或性能)成本。
答案 1 :(得分:0)
接受的答案:实例化集合时,它是空的。它具有的任何初始容量都是空值,因此在这种情况下没有列表。 - 锆石
答案 2 :(得分:0)
您的代码:
Map<String,List<String>> = new HashMap<String, List<String>>();
仅适用于参数化HashMap的实例化。您正在使用泛型来强制执行泛型类型,这些类型声明TYPE for key必须是String,TYPE值必须是List<String>
。在您开始将单独创建的List<String>
对象添加到地图中之前,内存中没有List<String>
。这看起来像这样:
Map<String, List<String>> myMap = new HashMap<>();//BTW, You only need to parameterize the object declaration since Java 7
List<String> names = new ArrayList<String>();
names.add("Betty");
names.add("Bob");
names.add("Jessica");
names.add("Jim");
myMap.put("names", names);//Where "names" is your key and names is your value.
您可以继续从那里向地图添加更多列表。