我最近和一位同事讨论了为什么Java中的List接口(interface)没有head()tail()方法。

为了实现这样的功能,必须编写一个看起来像这样的包装器:

public E head() {
 if (underlyingList == null || underlyingList.isEmpty())
  return null;

 return underlyingList.get(0);
}


public E tail() {
 if (underlyingList == null || underlyingList.isEmpty())
  return null;

 return underlyingList.get(underlyingList.size()-1);
}

我不知道所有List的实现,但是我假设至少在LinkedList和ArrayList中,它对于获得最后和第一个元素(恒定时间)应该是微不足道的。

所以问题是:

是否有特定的原因为什么不能为任何List实现提供尾部方法?

最佳答案

Java Collections Framework由Joshua Bloch编写。他的API设计原则之一是:高功率重量比
tail()head()可以由get()size()实现,因此不必将tail()head()添加到非常通用的接口(interface)java.util.List中。用户一旦使用了这些方法,就没有机会删除它们,而必须永远维护这些不必要的方法。那很糟。

07-28 02:32