java.utils
包中的collections.list()方法返回ArrayList
而不是List
有充分的理由吗?
免责声明:我不是JDK作者。
我同意将自己的代码编写到接口中是正确的,但是如果要将可变集合返回给第三方,那么让第三方知道他们将返回什么样的列表
是很重要的。
就性能而言,LinkedList
和ArrayList
对于不同的操作是非常不同的。例如,删除ArrayList
的第一个元素是O(n)
,而删除LinkedList
的第一个元素是O(1)
。
通过完全指定返回类型,JDK作者在明确的代码中传达了额外的信息,说明他们将返回给您什么样的对象,因此您可以编写代码来正确使用此方法。如果您确实需要LinkedList
,您知道必须在这里指定一个。
最后,在实现上编写接口代码的主要原因是如果您认为实现会更改。JDK作者可能认为他们永远不会改变这种方法;它永远不会返回LinkedList
或Collections.unmodifiableList
。然而,在大多数情况下,您可能仍然会这样做:
List<T> list = Collections.list(enumeration);
问题内容: Java (可能还有许多其他类)内部发生的事情是有一个内部对象,对象被写入其中。每当从元素中读取元素时,都会进行转换。因此,每次读取时都要进行转换。 我不知道为什么要这样做。对我来说,似乎他们只是在做不必要的演员。只创建一个,然后不进行强制转换,是否更合乎逻辑,并且速度稍快一些?每次阵列创建仅一次强制转换,通常 远 少于读取次数。 为什么首选他们的方法?我看不出为什么我的想法并不严格吗
问题内容: 我有一个很大的 pyspark.sql.dataframe.DataFrame 名为df。我需要某种枚举记录的方式- 因此,能够访问具有特定索引的记录。(或选择具有索引范围的记录组) 在大熊猫中,我可以 在这里我想要类似的东西 (并且不将数据框转换为熊猫) 我最接近的是: 通过以下方式枚举原始数据框中的所有对象: 问题: 为什么它不起作用以及如何使其起作用?如何在数据框中添加一行? 以
问题内容: 在Java 5及更高版本中,您具有foreach循环,该循环可以神奇地实现任何实现的对象: 但是,仍然没有实现,这意味着要迭代一个,您必须执行以下操作: 有谁知道为什么仍然不执行? 编辑: 为澄清起见,我不是在谈论枚举的语言概念,而是在Java API中称为“ 枚举 ” 的Java特定类。 问题答案: 枚举没有被修改为支持Iterable,因为它是一个接口,而不是一个具体的类(例如Ve
问题内容: Java不允许枚举位于接口内部,但是默认情况下,接口内部的每个数据成员都是。有人可以澄清吗? 问题答案: 枚举不能是最终的,因为编译器将为程序员明确为其定义实现的每个枚举条目生成子类。 此外,根据JLS第8.9节,没有实例具有自己的类主体的枚举是隐式最终的。
问题内容: 给定以下枚举,将Int强制转换为Java中的枚举的正确方法是什么? 问题答案: 尝试在必须为or的地方,即该枚举的有效序数。 请注意,在Java中,枚举实际上是类(因此,枚举值是对象),因此您不能将an 甚至转换为枚举。