【问题标题】:What is the purpose of replaceAll() method of List interface?List 接口的 replaceAll() 方法的目的是什么?
【发布时间】:2021-04-24 13:52:56
【问题描述】:

如果我们声明一个具有 Collection 引用类型的对象并在该对象上调用 replacAll()- Collection al = new ArrayList<>(); al.replaceAll(param); 我们不能调用这个方法,因为它不存在于 Collection 接口中 现在,如果我们声明一个具有 List 引用类型的 Object List al = new ArrayList<>(); al.replaceAll(param); 我们可以调用这个方法,因为它存在于 List 接口中,但它会执行 ArrayList 实现而不是 List 实现,因为对象是 ArrayList 类型。

现在我的问题是这个方法的 List 实现的目的是什么

【问题讨论】:

标签: java list arraylist collections replaceall


【解决方案1】:

ArrayList 不是唯一的列表类型。 List 接口还有其他实现者。您甚至可以编写自己的 List 实现。

你是对的,ArrayList 有自己的replaceAll 实现,因此会覆盖ListreplaceAll 的默认实现。 ArrayList 这样做可能是因为它可以提供比 List 中的默认实现“更好”的实现。

但是,例如,如果您使用LinkedList,则将执行replaceAll 的默认实现,如List 中所写。 LinkedList 不提供自己的 replaceAll 实现。这是replaceAllList 中实现的重点——提供一个默认实现,以便不是每个实现都必须实现replaceAll,但如果他们这样做了,那也没关系.

【讨论】:

  • ...尤其是在 Java 8 之前存在的第 3 方列表实现,因此无法覆盖 Java 8 中引入的方法。
【解决方案2】:

在这两个示例中,它是唯一的一个实现 - ArrayList。 Collection 和 List 是接口,而不是实现。

【讨论】:

  • List 接口有一个默认的replaceAll 方法实现。
  • 是的。我误解了问题的本质。问题的接口默认方法上下文在这里不清楚。
猜你喜欢
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
  • 1970-01-01
相关资源
最近更新 更多