有人能告诉我在java中实时使用空Iterator吗?我很想知道为什么需要它? 比如,
1. public static <T> Iterator<T> emptyIterator()
2. public static <T> ListIterator<T> emptyListIterator()
3. public static final <T> Set<T> emptySet(), etc..
来源:http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#emptyIterator()
答案 0 :(得分:11)
如果您实现的API需要迭代器,则可以使用空迭代器,但某些代码的逻辑可能不会在结果中产生任何项。在这种情况下,您将返回一个空迭代器,而不是返回null
。您还可以使用空迭代器来节省一些内存并用于测试目的。
以下是一些阻止返回null
并同时保存一些内存的示例代码:
class LazyObjectInitialization {
private Collection<String> items;
public final Iterator<String> items() {
if(items == null || items.isEmpty()) {
return Collections.emptyIterator();
}
return items.iterator();
}
public final add(String item) {
if(items == null) {
items = new ArrayList<>();
}
items.add(item);
}
}
在上面的类中,在添加元素之前,不会初始化字段items
。因此,为了在方法items()
中提供预期的行为,我们返回一个空的迭代器。这样做的好处如下:
内存消耗较小
较小的记忆突变
我们永远不会返回null
。