【问题标题】:"List interface provides two methods to efficiently insert and remove multiple elements" - Does anyone know what the second method is?“列表接口提供了两种有效插入和删除多个元素的方法” - 有谁知道第二种方法是什么?
【发布时间】:2021-05-26 21:44:12
【问题描述】:

从 Java 文档中我看到“List 接口提供了两种方法来有效地在列表中的任意点插入和删除多个元素。”。大概

  1. addAll​(int index, Collection extends E> c) 第二种方法是什么?

或者这是参考 removeAll​(Collection> c)addAll​(Collection extends E> c) ?

https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/List.html

【问题讨论】:

  • 你在问什么?你的问题的答案就在那里,你的问题。
  • 我以为我的问题已经足够清楚了。添加了我试图理解的 API 摘录的其余部分。希望这会有所帮助。很高兴进一步澄清。
  • 文档引用了两种方法,您列出了这两种方法,并询问文档引用了哪些方法。同样,我不确定你在问什么。
  • 没有。 removeAll​(Collection> c) 和 addAll​(Collection extends E> c) 定义在 List 继承自的集合接口中。我相信在这种情况下,API 指的是基于索引的:addAll​(int index, Collection extends E> c) 定义在 List 接口和第二种方法,这是我试图弄清楚的。
  • 除了addAll(int, Collection<? extends E> c) 几乎不是文档提到的“列表中的任意点”。我相信文档只是在提醒您List 包含那些继承的方法。

标签: java collections


【解决方案1】:

这是一个文档错误。见JDK-8215983

如您所述,可以使用addAll(int, Collection) 在列表中的任意位置插入多个元素。没有相应的 single 方法可以从列表中的任意特定点开始删除多个元素。这可以通过subList(from, to).clear() 方法序列来完成。

文档可能指的是removeRange 方法,它是AbstractList 上的一个受保护 方法。这是供使用AbstractList 实现的列表使用的,而不是供List 接口的一般用户使用的。它可能存在于List 接口的早期演变中,但从未清理过List 文档中对它的引用。

【讨论】:

  • 感谢分享斯图尔特。是的,从集合中的某个点删除集合甚至没有意义。我认为 removeRange 会是一种更实用的方法,更不用说操作本身与列表更相关。
  • @simiyub removeRange 方法是答案中提到的subList(from, to).clear() 操作的后端。实现者只有在有比重复调用remove(int) 更有效的解决方案时才需要处理它,因此他们应该重写该方法。请注意,甚至可以使用相同的方法“从某个点或范围删除集合”或范围,即subList(from, to).removeAll(Collection)。即使是现有的addAll(index, collection) 也可以改为subList(index, index).addAll(collection)
猜你喜欢
  • 1970-01-01
  • 2010-12-04
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
相关资源
最近更新 更多