2015-06-05 33 views
-1

許多建議在下面的用例中也使用CollectionUtils.isNotEmpty(coll)而不是coll != null是CollectionUtils.isNotEmpty()比空檢查好嗎?

if (CollectionUtils.isNotEmpty(coll)) { 
    for (String str : coll) { 
    } 
} 

代替

if (coll != null) { 
    for (String str : coll) { 
    } 
} 

是否有任何理由/好處在這裏使用CollectionUtils.isNotEmpty(coll),而不是其他?謝謝。

+1

在這個特定的情況下,沒有。但有時你在循環之前做其他操作,比如準備結構。 –

+0

有關空值檢查的相關問題:http://stackoverflow.com/questions/271526/ – blgt

+0

@DenysSéguret,在這個特定情況下,它*確實*有所作爲。如果'coll'爲'null','for(String str:coll)'會拋出'NullPointerException'。 – aioobe

回答

0

問題是,如果集合不爲空,集合仍可能爲空。所以,在你的情況下,它取決於你的喜好,你選擇什麼。

+3

這裏沒有什麼改變。 –

2

這裏沒有真正的優勢。即使有,它也會非常小。它只是防止創建Iterator並執行分支指令,這就是它的全部。

這個小優點只在集合爲空時纔會發生。下面的循環:

for (String str : coll) { 
    ... 
} 

相當於:

for (Iterator<String> iterator = col.iterator(); iterator.hasNext();) { 
    String str = iterator.next(); 
    ... 
} 

當集合爲空,就CollectionUtils.isNotEmpty(coll)支票防止循環的執行。因此在內存中不會創建Iterator,並且不會調用hasNext()。這需要致電coll.isEmpty()致電O(1)

+0

但即使優勢很小,也有一個。正確?你能否多解釋一下。謝謝。 – Trying

+0

@嘗試查看編輯答案。 – manouti

-1

反編譯揭示

public static boolean isEmpty(Collection coll) { 
    return coll == null || coll.isEmpty(); 
} 
+1

*「反編譯揭示」*或者......您知道......查看JDK中的源代碼。 –