【发布时间】:2011-09-27 12:06:23
【问题描述】:
我最近和一位同事讨论了为什么Java中的List接口没有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 实现提供 tail 方法不是一个好主意有什么具体原因吗?
【问题讨论】:
-
Deque接口中还有getFirst()和getLast() -
正如其他人解释的
head()和tail()可以简单地实现。但我想提醒你不要使用return null部分——除非你有充分的理由,否则不要这样做。 -
tail传统上应该返回列表减去它的头部。这就是你在任何函数式语言中都能得到的。 -
因混淆不正确的术语而被否决的问题。请改写问题,将“head”替换为“last”(至少,这是此处实现的 Haskell 名称)。
-
很抱歉,这让您感到困惑,但在 java api 文档中,“head”和“tail”这两个术语被多次使用,所以我想对于这种情况,这些是正确的条款。