Java-da kolleksiyanın boş olub olmadığını yoxlayın: hansı üsul yaxşıdır?

Siyahının boş olub olmadığını yoxlamaq üçün iki yolum var.

 if (CollectionUtils.isNotEmpty(listName)) 

və həmçinin

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

Mənim kemerimə görə, birincisi ikincidən yaxşıdır. Amma sonuncunun daha yaxşı olduğunu düşünürəm.

Kimsə aydınlıq edə bilərmi?

55
22 июня '12 в 11:17 2012-06-22 11:17 Vikrant 22 İyun 2012 tarixində saat 11: 70-də təyin olunub . 2012-06-22 11:17
@ 11 cavab

Siz mütləq isEmpty() istifadə isEmpty() . Bir ixtiyari siyahısı size() hesablamaq çox bahalı ola bilər. Əlbəttə ki, hər hansı bir elementin olub olmadığını yoxlamaq bahalı ola bilər, amma size() üçün optimallaşdırma yoxdur, bu da mümkün deyil, isEmpty() daha sürətli, əksinə isə belə deyil.

Örneğin, ölçüsü önbelleğe almayan ( LinkedList<E> ) bağlı bir liste yapısı olduğunuzu varsayalım. Sonra size() O (N) əməliyyatı olacaq, isEmpty() isə O(1) .

Bundan əlavə, əlbəttə, isEmpty() istifadə həqiqətən daha maraqlı maraqlı olduğunu göstərir.

118
22 июня '12 в 11:23 2012-06-22 11:23 Cavab Jon Skeet tərəfindən 22 İyun '12 'də saat 11:23' də verilir. 2012-06-22 11:23

CollectionUtils.isNotEmpty kolleksiyanız boş və boş olmadığını yoxlayır. Bu ikili yoxlama ilə müqayisədə daha yaxşıdır, ancaq layihənizdə bu Apache kitabxananız varsa. Bunu etməsəniz, istifadə edin:

border=0
 if(list != null  !list.isEmpty()) 
48
22 июня '12 в 11:21 2012-06-22 11:21 cavab 22 iyun 2012- ci il tarixində saat 11 : 21-alexey28 tərəfindən verilir . 2012-06-22 11:21

Siz artıq CollectionUtils istifadə List.isEmpty() , daha az asılılıqla List.isEmpty() .

Performans yavaş olacaq. Əsasən eyni məntiqə əsasən, əlavə yüklənmə var.

Beləliklə, performans və bağımlılıklara qarşı okunabilirlik olacaq. Ancaq böyük bir fərq yoxdur.

10
22 июня '12 в 11:21 2012-06-22 11:21 cavab 22 iyun 2012-ci il tarixində saat 11: 21-də verilir. 2012-06-22 11:21

if (CollectionUtils.isNotEmpty(listName))

Eyni şəkildə:

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

Birinci yanaşmada listName ola bilər və boş göstərici istisna seçilməyəcək. İkinci yanaşmada null dəyərini əl ilə yoxlamaq lazımdır. İlk yanaşma daha yaxşıdır, çünki sizinlə daha az iş tələb edir. .size() != 0 istifadə .size() != 0 lazımsız bir şeydir, mən də istifadə .isEmpty() daha yavaş olduğunu öyrəndim .isEmpty()

7
06 июля '15 в 12:05 2015-07-06 12:05 Cavab lxknvlk tərəfindən verilir 06 iyul '12' da 12:05 2015-07-06 12:05

Layihədə ümumi Apache yardım proqramlarınız varsa, ilk istifadə edin. Çünki son qısa və tam olaraq eynidır. Bu üsullar arasında heç bir fərq olmayacaq, ancaq mənbə kodu içində göründüyü kimi.

Həm də boş istifadə edin

 listName.size() != 0 

Tövsiyə olunmur, çünki bütün kolleksiya tətbiqləri var

 listName.isEmpty() 

eyni şeyi edir.

Beləliklə, ümumiyyətlə, sinif yolunuzda Apache xidmətlərini bölüşdüyünüz halda istifadə edin

 if (CollectionUtils.isNotEmpty(listName)) 

hər hansı digər halda istifadə

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

Performans fərqini görməyəcəksiniz. Hər iki xətt eynidır.

6
22 июня '12 в 11:24 2012-06-22 11:24 Cavab Nitram tərəfindən 22 İyun 2012 günü saat 11: 00-da verilir. 2012-06-22 11:24

ApacheUtils.isNotEmpty koleksiyonlarının (toplama) kolleksiyası NULL-SAFE yoxlamalıdır.

TRUE qaytarır: toplama / siyahı boş deyil və qeyri-boş deyil. Toplama Null olduqda FALSE qaytarır.

Məsələn:

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

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

2
13 окт. 13 oktyabrda Suren Konathala tərəfindən verilmiş cavab 2014-10-13 23:37 '14 də 23:37 2014-10-13 23:37

Bunun praktikasında yaxşı bir nümunə JDK-da ConcurrentSkipListSet tətbiqidir :

Çox koleksiyonlardan fərqli olaraq, ölçmə metodu sabit vaxtlı bir əməliyyat deyildir.

Bu isEmpty() size()==0 yoxlamaqdan daha səmərəli olduqda size()==0 isEmpty() açıq bir vəziyyətdir.

Niyə, intuitiv olaraq, bu, bəzi koleksiyonlarda ola bilər. Əgər bu, elementləri saymaq üçün bütün bunlardan keçmək lazım olan bir quruluşa sahibdirsə, onda bilmək istədiyiniz hər şey boş olduğundan, ilkini tapa biləcəyiniz anda dayanacaq.

1
17 дек. Cavab çıxış təhlükəsizliyi verilir 17 Dekabr. 2014-12-17 15:33 '14 saat 15:33 'də 2014-12-17 15:33

CollectionUtils.isEmpty (Collection kol) istifadə edin

Göstərilən kolleksiya boş olduğundan sıfır yoxlayın. Null doğru qaytarır.

Parameters: coll - yoxlama üçün toplama, bəlkə null

Qaytarma: boş və ya null olduqda doğru

1
11 июля '17 в 14:09 2017-07-11 14:09 Cavab 11 İyul tarixində '17 saat 14:09 'də verilir 2017-07-11 14:09
 isEmpty() Returns true if this list contains no elements. 

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/List.html

0
22 июня '12 в 11:19 2012-06-22 11:19 cavab 22 iyun 2012- ci il tarixində saat 11: 19-da user278064 tərəfindən verilir . 2012-06-22 11:19

Birincisini istifadə edərdim. Dərhal nə etdiyini dərk etmək aydındır. Burada sıfır yoxlama lazım olduğunu düşünmürəm.

0
22 июня '12 в 11:19 2012-06-22 11:19 cavab 22 iyun 2012- ci il tarixində saat 11:19 radələrində verilir. 2012-06-22 11:19

Koleksiyanın boş olduğunu yoxlayın, metodu istifadə edə bilərsiniz: .count (). Məsələn:

 DBCollection collection = mMongoOperation.getCollection("sequence"); if(collection.count() == 0) { SequenceId sequenceId = new SequenceId("id", 0); mMongoOperation.save(sequenceId); } 
-1
Cavab TVT tərəfindən verilir . 03 февр. Jake 03 Feb 2016-02-03 07:42 '16 saat 07:42 'də 2016-02-03 07:42

bağlı digər suallar və ya sual verin