2013-05-04 26 views
0
Public Static Void Main() { 
    LinkedList q = new LinkedList(); 
    q.enqueue(Object); 
    System.out.println(q.deque().getString()); //it will print the string of the popped object 
} 

如果队列变为空,它将会发出异常,因为q.deque()指向null,null上的任何方法都会给出异常。处理空引用

Object k = q.dequeue(); 
if(k != null) 
System.out.println(k.getString()); 

有没有更好的办法做到这一点,而不是在主程序中检查空指针:

我们可以将其更改为实现这一目标?

+1

如果您使用的是Object.toString而不是wh您定义的atever'getString'方法,如果元素为null,则'System.out.println(q.deque())'会输出字符串'“null”。除此之外,你基本上已经获得了最好的解决方案。 – 2013-05-04 00:05:54

+0

你或许可以检查'的isEmpty()'或东西的'叫q'之前'双端队列()'。但是你必须检查某个地方。 – dlev 2013-05-04 00:06:54

+0

@LouisWasserman你的意思是'Objects.toString'?小的差异,但它可以混淆 – nullptr 2013-05-04 00:07:19

回答

1

按Java最佳的编码实践,如果你有返回集合,如列表/设置/图和情况下,当集合中没有任何元素的方法,那么它是一件好事,retunr空的集合,而不是空的。

例如,你可以使用列表:

return Collections.emptyList(); // when the list is empty instead of return null 

这样可以节省如果程序员已经错过了空指针检查调用代码空指针异常。

希望它有帮助!

0

我不知道,因为版本附带的JDK是通用的,没有dequeue()queue(..)方法,但有一个isEmpty()方法,所以最合理的方式做这将是你使用的是什么样的LinkedList你可以这样做:

while (!q.isEmpty()) { 
    S.O.P(q.deque().getString()); 
} 

注意,这个功能是用于所有集合与JDK船,因为它是在Collection<E>接口中声明。

0

根据良好的编码习惯,总是返回一个空集合。

List: Collections.emptyList() 
Set: Collections.emptySet() 
Map: Collections.emptyMap() 

以上帮助:

  • 避免NPE - NullPointerException异常
  • 额外的检查需要的,如果集合是迭代过来
  • 一成不变的收藏对象,如果主叫方试图修改之前空或不集合,得到UnsupportedOperationException