我有以下代码。我想了解它是否会对内存进行任何更改。使用临时变量使用收集器
方法1:使用收藏家,我可以直接返回地图像这样:
List<Customer> customerList = new ArrayList<>();
customerList.add(new Customer("1", "pavan"));
customerList.add(new Customer("2", "kumar"));
return customerList.stream().collect(Collectors.toMap(t->t.getId(), t->t));
方法2:使用一个明确的地图,收集结果,就像这样:
Map<String,Customer> map = new HashMap<String, Customer>();
map = customerList.stream().collect(Collectors.toMap(t->t.getId(), t->t));
return map;
相比第一,如果我迭代了一百万次,第二种方法对内存/ GC有什么影响?
在你的第二个例子,我想你可能意味着使用.forEach()和put()在地图上? (如果没有,你实例化一个没有任何东西的地图:))顺便说一下,Guava提供了Maps.uniqueIndex,这是写这个相同代码的稍微短一些的方法。我很确定这些开销几乎相同。 – EvanM
是的,我可以做到这一点。但我想了解第二个代码是否与GC性能有关 – pppavan
是的 - 它们几乎完全相同。收集器也创建了一个HashMap,但是对于寻找重复数据有点奇怪。你的第二个片段忽略重复。应该几乎完全相同的GC开销。 – EvanM