在 java 中使用 emptyIterator

2022-09-04 20:22:49

任何人都可以让我知道Java中空迭代器的实时使用是什么?我很想知道为什么需要它?诸如此类的事情,

 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()


答案 1

在实现的 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);
   }
}

在上面的类中,在添加元素之前不会初始化字段。因此,为了在方法中提供预期的行为,我们返回一个空的迭代器。这样做的好处如下:itemsitems()

  • 更小的内存消耗

    • 该类仅在确实需要时才分配内存。
  • 较小的记忆突变

    • 在向对象中添加某些内容之前,我们永远不会创建迭代器的新实例。
  • 我们永远不会回来。null


答案 2