当前位置: 首页 > 面试题库 >

为什么列表中没有tail()或head()方法来获取最后一个或第一个元素?

邵研
2023-03-14
问题内容

我最近与一位同事讨论了Java为什么List接口没有head()and 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方法?


问题答案:

Java Collections Framework由Joshua Bloch编写。他的API设计原则之一是: 高功率重量比

tail()并且head()可以通过get()and
来实现size(),因此无需在通用接口中添加tail()和。用户一旦使用了这些方法,就没有机会删除它们,而必须永远维护这些不必要的方法。那很糟。head()``java.util.List



 类似资料:
  • rank ▲ ✰ vote url 61 374 45 700 url 获取列表最后一个元素 在Python里,如何获取一个列表的最后一个元素? some_list[-1]最短最Pythonic的方法. 事实上你可以用这个语法做好多事.some_list[-n]语法获取倒数第n个元素.所以some_list[-1]获取最后一个元素,some_list[-2]获取倒数第二个,等等.最后some_li

  • 问题内容: 我正在尝试编写这样的日历功能 是整数(1、2、3 …),$ day是一天(Sun,Mon,…)或数字,以较容易的一个为准。方向有些混乱,因为它进行了不同的计算。 举个例子 它使用默认值,并获得5月的第一个星期日,即2009-05-03。如果我们打电话 ,它将返回5月的第二个最后一个星期日,即2009-05-24。 问题答案: 也许可以使其更快。。。 代码非常有趣。 请注意,前进1表示反

  • 返回数组的第一个元素。 使用 arr[0] 返回传递数组的第一个元素。 const head = arr => arr[0]; head([1, 2, 3]); // 1

  • 问题内容: 在Python中,如何获取列表的最后一个元素? 问题答案: 是最短和最的。 实际上,你可以使用此语法做更多的事情。该语法获取第n到最后一个元素。因此获取最后一个元素,获取倒数第二个,依此类推,一直向下到,这将为你提供第一个元素。 你也可以通过这种方式设置列表元素。例如: 请注意,如果期望的项目不存在,则按索引获取列表项将引发。这意味着如果为空将引发异常,因为空列表不能有最后一个元素。

  • 问题内容: 流没有方法: 获取最后一个元素(或对于空Stream为null)的最优雅和/或最有效的方法是什么? 问题答案: 做一个简单地返回当前值的归约:

  • Stream没有方法: 获取最后一个元素(或空流为null)的最优雅和/或最有效的方法是什么?