2014-11-24 57 views
26

即使它具有泛型类型参数,我是否可以将null值添加到ArrayList将空值添加到arraylist中

例如,

ArrayList<Item> itemList = new ArrayList<Item>(); 
itemList.add(null); 

如果是这样,将

itemsList.size(); 

返回1或0?

如果我可以将null的值添加到ArrayList,我可以只循环包含像这样的项目的索引吗?

for(Item i : itemList) { 
    //code here 
} 

或者,对于每个循环还会循环通过列表中的空值吗?

+11

为什么不写一个代码来尝试这些?看到[问]发布一个有效的问题 – 2014-11-24 14:27:24

+3

为什么不直接运行它并看到?,任何问题然后发布在这里 – 2014-11-24 14:27:31

+8

是的,1,不,是的。 – khelwood 2014-11-24 14:28:29

回答

25

是的,你可以随时使用null,而不是一个对象。只是要小心,因为有些方法可能会引发错误。

这将是1

null s就在for循环中被考虑进来,但是你可以使用

for(Item i : itemList) { 
     if (i!= null) { 
       //code here 
     } 
} 
20

您可以添加空的ArrayList,你将不得不以检查循环空:

for(Item i : itemList) { 
    if (i != null) { 

    } 
} 

itemsList.size();将采取null考虑。

List<Integer> list = new ArrayList<Integer>(); 
list.add(null); 
list.add (5); 
System.out.println (list.size()); 
for (Integer value : list) { 
    if (value == null) 
     System.out.println ("null value"); 
    else 
     System.out.println (value); 
} 

输出:

2 
null value 
5 
+1

谢谢,我猜测.size()方法也会将空值考虑在内。 – 2014-11-24 14:29:16

0

您可以创建的Util类:

public final class CollectionHelpers { 
    public static <T> boolean addNullSafe(List<T> list, T element) { 
     if (CollectionUtils.isEmpty(list) || element == null) { 
      return false; 
     } 

     return list.add(element); 
    } 
} 

而且然后使用它:

Element element = getElementFromSomeWhere(someParameter); 
List<Element> arrayList = new ArrayList<>(); 
CollectionHelpers.addNullSafe(list, element);