我有以下代碼。我想了解它是否會對內存進行任何更改。使用臨時變量使用收集器
方法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