Mat*_*and 10
您可以使用tail专门用于获取“除第一项之外的所有内容”的方法:
groovy:000> [1,2,3,4,5].tail()
===> [2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
这与head(head and tail...有意义) 形成对比,它会给你第一项(与 相同first()):
groovy:000> [1,2,3,4,5].head()
===> 1
groovy:000> [1,2,3,4,5].first()
===> 1
Run Code Online (Sandbox Code Playgroud)
更正:如果“到位”我们的意思是修改原始列表,那么我认为removeAt并且remove是您的朋友,正如另一个答案所建议的那样。
remove/removeAt不返回结果列表(它们返回已删除的元素),这是不幸的,但似乎它们是唯一实际修改列表的人。
尽管应该注意的是,即使remove/removeAt至少对于 ArrayList 实现来说,它也会System.arraycopy在幕后进行操作,这意味着仍然要复制数据。虽然复制可能是在 jvm 上以最快的方式完成的,但仍然是一个复制。
对于您可能一直在寻找的恒定时间删除,您可以例如确保您的列表是 LinkedList 的实例:
def list = [1,2] as LinkedList
list.remove(0)
Run Code Online (Sandbox Code Playgroud)
此时第一个元素在恒定时间内“取消链接”,无需复制任何数据。
尝试removeAt(0)或remove(0):
通过删除此列表中指定位置的元素来修改此列表。返回被移除的元素。本质上是 List#remove(int) 的别名,但 List<Integer> 没有歧义。
def lst = [1, 2, 3]
println lst
lst.removeAt(0) // or lst.remove(0)
println lst
Run Code Online (Sandbox Code Playgroud)
输出:
[1, 2, 3]
[2, 3]
Run Code Online (Sandbox Code Playgroud)