簡體   English   中英

Java性能避免創建新的循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM