2012-06-22 14 views
39

है मैं की तुलना करने के दो तरीके हैं, तो एक सूची खाली है या नहींजांच करता है, तो एक संग्रह जावा में रिक्त है: जो सबसे अच्छा तरीका

if (CollectionUtils.isNotEmpty(listName)) 

और

if(listName != null && listName.size() != 0) 

मेरे मेहराब मुझे उस बताता है पूर्व बाद की तुलना में बेहतर है।

लेकिन मुझे लगता है कि बाद वाला बेहतर है। क्या कोई इसे स्पष्ट कर सकता है।

+0

क्यों आपको लगता है कि "बाद" बेहतर है coll जाँच करने के लिए संग्रह, अशक्त

रिटर्न हो सकता है? – ant

+0

ओपी नहीं लगता कि –

+3

क्यों नहीं 'listname.isEmpty() '? 'isEmpty' संग्रह इंटरफ़ेस – ccheneson

उत्तर

102

आप चाहिए बिल्कुल उपयोग isEmpty()। मनमानी सूची के size() की गणना करना महंगा हो सकता है। यहां तक ​​कि यह सत्यापित करने के लिए कि क्या उसके पास कोई तत्व महंगा हो सकता है, लेकिन size() के लिए कोई अनुकूलन नहीं है जो भीisEmpty() तेज नहीं कर सकता है, जबकि विपरीत नहीं है।

उदाहरण के लिए, मान लीजिए कि आपके पास लिंक सूची संरचना जो नहीं कैश आकार था (जबकि LinkedList<E>करता) था। फिर size() एक ओ (एन) ऑपरेशन बन जाएगा, जबकि isEmpty() अभी भी O(1) होगा।

बेशक, isEmpty() का उपयोग करके आप वास्तव में अधिक स्पष्ट रूप से रुचि रखते हैं।

0

मैं पहली बार एक का प्रयोग करेंगे। यह देखने के लिए स्पष्ट है कि यह क्या करता है। मुझे नहीं लगता कि शून्य जांच यहां जरूरी है।

9

जब तक आप संग्रह उपयोग का उपयोग नहीं कर रहे हैं, मैं List.isEmpty(), कम निर्भरताओं के लिए जाऊंगा।

प्रदर्शनवार संग्रह संग्रह एक पतला धीमा होगा। क्योंकि यह मूल रूप से एक ही तर्क का पालन करता है लेकिन अतिरिक्त ओवरहेड होता है।

तो यह पठनीयता बनाम प्रदर्शन बनाम निर्भरता होगी। यद्यपि एक बड़ा अंतर नहीं है।

+0

डेवलपर के रूप में 20 साल और CollectionUtils का उपयोग करने की आदत ने मुझे आलसी बना दिया। मानक सूची भी नहीं देखा .isEmpty()! सीखने के लिए कभी भी पुराना नहीं है। धन्यवाद दोस्त! मैं इस के इस पहलू को बदल दूंगा :- डी – Lawrence

+6

List.isEmpty() CollectionUtils.isEmpty() के समान नहीं है! उत्तरार्द्ध उस मामले को संभालेगा जहां संग्रह शून्य है, पूर्व एनपीई फेंक देगा। – Starkii

35

CollectionUtils.isNotEmpty जांचता है कि आपका संग्रह शून्य नहीं है और खाली नहीं है। यह दोहरी जांच की तुलना में बेहतर है, लेकिन केवल तभी जब आपके पास इस प्रोजेक्ट में यह अपाचे लाइब्रेरी है। आप तो नहीं करते हैं का उपयोग करें:

if(list != null && !list.isEmpty()) 
6

यदि आपके पास अपनी परियोजना में अपाचे सामान्य उपयोगिताएं हैं, तो पहले का उपयोग करें। क्योंकि इसका छोटा और बाद वाला एक जैसा ही है। दोनों विधियों के बीच कोई अंतर नहीं होगा लेकिन यह स्रोत कोड के अंदर कैसा दिखता है।

इसके अलावा

listName.size() != 0 

का उपयोग कर एक खाली जांच हतोत्साहित क्योंकि सभी संग्रह कार्यान्वयन

listName.isEmpty() 

समारोह है कि ठीक उसी करता है।

तो सब सब में, यदि आप अपने classpath में अपाचे आम utils वैसे भी है,

if (CollectionUtils.isNotEmpty(listName)) 

किसी अन्य स्थिति में उपयोग

if(listName != null && listName.isEmpty()) 

का उपयोग आप किसी भी प्रदर्शन अंतर दिखाई नहीं देगा। दोनों पंक्तियां बिल्कुल वही करती हैं।

+1

ऐसे संग्रह हैं जहां 'आकार()' विधि ओ (एन) है। आम तौर पर यह अपेक्षा की जाती है कि सभी 'लक्षण() 'कार्यान्वयन ओ (1) होंगे। –

2

अपाचे कॉमन्स 'CollectionUtils.isNotEmpty (संग्रह) एक शून्य-सेफ जांच

रिटर्न सही है संग्रह/सूची नहीं खाली और नहीं-अशक्त रिटर्न गलत करता है, तो संग्रह अशक्त है है

उदाहरण:

List<String> properties = new ArrayList(); 
... 
if (CollectionUtils.isNotEmpty(properties)) { 
    // process the list 
} else { 
// list is null or empty 
} 

देखें: https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/CollectionUtils.html#isNotEmpty(java.util.Collection)

1

एक अच्छा exa जहां इस अभ्यास में मायने रखती है की mple JDK, जिसमें कहा गया है में ConcurrentSkipListSet implementation है:

कि, के विपरीत सबसे संग्रह में, आकार विधि एक निरंतर समय ऑपरेशन नहीं है सावधान रहें।

यह एक स्पष्ट मामला है जहां isEmpty()size()==0 की जांच करने से कहीं अधिक कुशल है।

आप देख सकते हैं कि क्यों, सहजता से, यह कुछ संग्रहों में मामला हो सकता है। यदि यह संरचना की तरह है जहां आपको तत्वों की गिनती करने के लिए पूरी चीज को पार करना है, तो यदि आप जानना चाहते हैं कि यह खाली है, तो आप जितनी जल्दी पाएंगे उतना ही रोक सकते हैं। हो सकता है बातिल और शून्य सूचक अपवाद उत्पन्न नहीं किया जाएगा पहले दृष्टिकोण listName में

if(listName != null && !listName.isEmpty())

:

6

if (CollectionUtils.isNotEmpty(listName))

के रूप में ही है। दूसरे दृष्टिकोण में आपको मैन्युअल रूप से शून्य की जांच करनी होगी। पहला दृष्टिकोण बेहतर है क्योंकि इसे आपके से कम काम की आवश्यकता है। .size() != 0 का उपयोग करना कुछ अनावश्यक है, मैंने यह भी सीखा है कि .isEmpty()

0

संग्रह की जांच करने के लिए यह खाली है, आप विधि: .count() का उपयोग कर सकते हैं। उदाहरण:

DBCollection collection = mMongoOperation.getCollection("sequence"); 
    if(collection.count() == 0) { 
     SequenceId sequenceId = new SequenceId("id", 0); 
     mMongoOperation.save(sequenceId); 
    } 
-2

उपयोग CollectionUtils.isEmpty (संग्रह coll)

अशक्त-सुरक्षित की जांच करता है, तो निर्दिष्ट संग्रह खाली है। नल सत्य लौटता है।

पैरामीटर: -: अगर सही है खाली या शून्य

संबंधित मुद्दे