2010-07-08 28 views
26

Là một Arraylist rỗng (có null là các mục của nó) được coi là null? Vì vậy, về cơ bản sẽ báo cáo kết quả dưới đây là đúng:Empty ArrayList bằng null

if (arrayList != null) 

nhờ

Trả lời

61

No.

Một ArrayList có thể trống (hoặc có null là mục) không được rỗng. Nó sẽ được coi là trống rỗng. Bạn có thể kiểm tra am ArrayList rỗng với:

ArrayList arrList = new ArrayList(); 
if(arrList.isEmpty()) 
{ 
    // Do something with the empty list here. 
} 

Hoặc nếu bạn muốn tạo ra một phương pháp để kiểm tra đối với một ArrayList với chỉ null:

public static Boolean ContainsAllNulls(ArrayList arrList) 
{ 
    if(arrList != null) 
    { 
     for(object a : arrList) 
      if(a != null) return false; 
    } 

    return true; 
} 
+3

Tại sao không trả về boolean (kiểu nguyên thủy) thay vì Boolean (đối tượng)? –

+0

bạn có thể cho tôi một ví dụ về cách tạo một arrayList trống không? – Venki

1

Không, bởi vì nó có chứa các mặt hàng phải có một thể hiện của nó. các mục của nó đang được null là không thích hợp, vì vậy Statment ((ArrayList)! = null) == true

20

arrayList == null nếu không có thể hiện của lớp ArrayList gán cho biến arrayList (chú ý upercase cho các lớp học và chữ thường cho biến).

Nếu, vào bất cứ lúc nào, bạn làm arrayList = new ArrayList() sau đó arrayList != null vì được trỏ đến một thể hiện của lớp ArrayList

Nếu bạn muốn biết nếu danh sách rỗng, đừng

if(arrayList != null && !arrayList.isEmpty()) { 
//has items here. The fact that has items does not mean that the items are != null. 
//You have to check the nullity for every item 

} 
else { 
// either there is no instance of ArrayList in arrayList or the list is empty. 
} 

Nếu bạn don Không muốn các mục rỗng trong danh sách của bạn, tôi khuyên bạn nên mở rộng lớp ArrayList bằng chính mình, ví dụ:

public class NotNullArrayList extends ArrayList{ 

@Override 
public boolean add(Object o) 
    { if(o==null) throw new IllegalArgumentException("Cannot add null items to the list"); 
     else return super.add(o); 
    } 
} 

Hoặc có thể bạn có thể mở rộng nó để có một phương thức bên trong lớp của riêng bạn để định nghĩa lại khái niệm "Danh sách trống".

public class NullIsEmptyArrayList extends ArrayList{ 

@Override 
public boolean isEmpty() 
    if(super.isEmpty()) return true; 
    else{ 
    //Iterate through the items to see if all of them are null. 
    //You can use any of the algorithms in the other responses. Return true if all are null, false otherwise. 
    //You can short-circuit to return false when you find the first item not null, so it will improve performance. 
    } 
} 

Hai phương pháp cuối cùng là các giải pháp hướng đối tượng, thanh lịch và có thể tái sử dụng hơn.

Đã cập nhật với Jeff đề xuất IAE thay vì NPE.

+0

gợi ý đẹp của bạn! Tôi sẽ sử dụng một IllegalArgumentException hơn là một NPE trong ví dụ NotNullArrayList. – Jeff

+0

Jeff, gợi ý tốt. Tôi đã thay đổi nó. – pakore

4

Không, điều này sẽ không làm việc. Điều tốt nhất bạn có thể làm là lặp qua tất cả các giá trị và tự mình kiểm tra:

boolean empty = true; 
for (Object item : arrayList) { 
    if (item != null) { 
     empty = false; 
     break; 
    } 
} 
+0

Mà sẽ trả về false cho một danh sách có chứa một giá trị null duy nhất, vì vậy có lẽ không. –

+0

Cảm ơn bạn, đã khắc phục. Dường như tiêu đề 'Empty ArrayList bằng null' đã ném tôi. – krock

0

Trước hết, bạn có thể tự mình xác minh bằng cách viết một TestCase đơn giản!

trống ArrayList (với null như các mục của nó)

Thứ hai, Nếu ArrayList là EMPTY có nghĩa là nó là thực sự trống rỗng, nó không thể có những thứ NULL hoặc KHÔNG NULL như yếu tố.

Thứ ba,

List list = new ArrayList(); 
    list.add(null); 
    System.out.println(list == null) 

sẽ in sai.

2

Cũng giống như số không là một số - chỉ là một số đại diện không có - một danh sách trống vẫn là một danh sách, chỉ là một danh sách không có gì trong đó. null không có danh sách nào cả; do đó nó khác với một danh sách trống.

Tương tự, danh sách chứa các mục rỗng là một danh sách và là không danh sách trống. Bởi vì nó có các vật phẩm trong đó; không quan trọng là những đồ vật đó là vô giá trị. Ví dụ, một danh sách có ba giá trị null trong nó, và không có gì khác: chiều dài của nó là bao nhiêu? Chiều dài của nó là 3. Độ dài của danh sách trống là 0. Và, tất nhiên, null không có chiều dài.

0

Nếu bạn muốn kiểm tra xem mảng chứa các mục có giá trị null, sử dụng này:

private boolean isListOfNulls(ArrayList<String> stringList){ 
    for (String s: stringList) 
     if(s != null) return false; 
    return true; 
} 

Bạn có thể thay thế <String> với loại tương ứng cho ArrayList

Các vấn đề liên quan