我最近和一位同事讨论了为什么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
中。用户一旦使用了这些方法,就没有机会删除它们,而必须永远维护这些不必要的方法。那很糟。