[英]Java performance avoid creating new in loop
我有這樣的代碼
Map<String, List> searchMap = new HashMap<String, List>();
for(int i=0; i<something.size(); i++){
List<String> list = new ArrayList<String>();
list = getResult(...);
...
searchMap.put(differentkey, list);
}
每次循環創建新列表時。 如何避免循環創建新列表。
根本不創建列表,因為您所顯示的代碼中甚至沒有使用它。
List<String> list = getResult(...);
你為什么要 鑒於您的地圖是從一個鍵到一個列表,因此看起來您想要的列表與您擁有的鍵一樣多...因此,您想要那么多不同的列表。
特別是,你不想只是清除在每次迭代列表-否則每個地圖項將指向同一個列表 。
現在,您不必創建一個空列表,然后將其忽略-您可以在聲明中立即將getResult()
的值分配給該變量:
List<String> list = getResult(...);
可能仍會在每次迭代中創建一個新列表(除非getResult()
返回一個現有列表),但這仍然是您想要的。
請注意,在循環外聲明list
變量沒有任何好處-變量聲明不會影響性能,但是通常最好盡可能限制變量的范圍-因此我將聲明保留在原處。
嘗試以下方法:
Map<String, List> searchMap = new HashMap<String, List>();
for(int i=0; i<something.size(); i++){
List<String> list = getResult(...);
...
searchMap.put(differentkey, list);
}
無需構建新列表。
Map<String, List> searchMap = new HashMap<String, List>();
List<String> list = new ArrayList<String>();
for(int i=0; i<something.size(); i++){
list = getResult(...);
...
searchMap.put(differentkey, list);
}
在第四行( list = getResult(...);
),您正在為list
變量分配一個新對象。 因此,無需在此之前創建新列表。 無論如何,您的變量將被替換。
for(int i=0; i<something.size(); i++){
List<String> list = new ArrayList<String>();
list = getResult(...);
相當於
for(int i=0; i<something.size(); i++){
List<String> list = getResult(...);
但是我不確定,您是否真的在尋找這個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.