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

Java List toArray(T [] a)实现

闾丘炫明
2023-03-14
问题内容

我只是在查看List接口中定义的方法:

返回以正确顺序包含此列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。如果列表适合指定的数组,则将其返回。否则,将使用指定数组的运行时类型和此列表的大小分配一个新数组。如果列表适合指定的数组并有剩余空间(即,数组中的元素多于列表),则紧接集合结束后的数组中的元素设置为null。仅当调用者知道列表不包含任何null元素时,这才对确定列表的长度很有用。

<T> T[] toArray(T[] a);

我只是想知道为什么要这样实现,基本上,如果您将长度为<的数组传递给list.size(),它将简单地创建一个新数组并返回它。因此,在method参数中创建新的Array
Object是没有用的。

另外,如果您使用列表的大小将数组传递给数组足够长的时间,并且返回与该对象相同的对象,则返回该对象实在没有意义,因为它是同一对象,但为了清楚起见也可以。

问题是我认为这会导致代码效率低下,我认为toArray应该只接收该类,并只返回包含内容的新数组。

有没有任何理由为什么不这样编码?


问题答案:

正如其他人所提到的,有两个不同的原因:

  • 您需要以某种方式传递类型,并且传递指定类型的数组并不是一种合理的方法。诚然,如果您也为了速度而在您的Class中传递了一个版本,那就太好了。
  • 如果要重用数组,可以继续传递相同的数组,而不必每次都创建一个新数组。如果您需要多次这样做,可以节省时间和内存,并节省GC问题


 类似资料:
  • 问题内容: 我只是在查看List接口中定义的方法: ,我有一个问题。为什么是通用的?因此,方法不是完全类型安全的。以下代码片段可编译但会导致: 在我看来,如果toArray不是通用的并且采用List类型参数,那会更好。 我已经写了玩具示例,没有通用就可以了: 有什么理由可以这样声明? 问题答案: 从javadocs: 与toArray()方法一样,此方法充当基于数组的API和基于集合的API之间的

  • 我一直在研究一些涉及将ASCII值转换为字符串的问题。 如果我使用此代码,我会以的形式输出,这是意料之中的。 但是,如果我这样更改代码: 当我尝试编译它时,会显示以下错误: 两种代码之间的唯一区别是,在第1种代码中,我使用的是t=I‘a’ ,在秒时,<代码>t=t i“a” 。 有人能告诉我第二段有什么问题吗?

  • 我一直在学习如何使用java编程,但我还没有明确解释的和方法的区别。第二个只是将LinkedList对象中的所有元素作为数组返回,对吗?但是,第一个呢? 编辑: 我的意思是,我从甲骨文中阅读了文档,它说: 返回一个数组,其中包含此列表中所有元素的正确顺序(从第一个元素到最后一个元素);返回数组的运行时类型是指定数组的运行时类型。如果列表适合指定的数组,则返回该数组。否则,将使用指定数组的运行时类型

  • 问题内容: 我试图学习Java泛型,并发现以下代码。 哪个没有问题。 但是,当我将方法更改为以下内容时,它给了我编译错误。 错误: 谁能帮助我了解错误? 问题答案: 您应该了解的第一件事是,使用以下方法签名 双方 必须 是同一类型,也就是既和将具有相同infered类型。 那么,为什么它的工作和?因为这两个参数实际上可以表示为,这是最近的公用超类型和: 实现接口。 可以装进一个盒子,也可以。 因此

  • 你的类型需要排序关系用于定义集合的排序和搜索。 .NET 框架定义两个接口描述类型的排序关系: IComparable<T> 和 IComparer<T> 。IComparable 定义了类型的自然排序。类型实现的 IComparer 描述的另一个排序。你可以在接口中提供具体类型的比较并避免运行时低效率的自定义关系操作符( < ,>,<=,>= )的实现。本原则会讨论怎么实现排序关系,.NET 核

  • 关于泛型类型,这可能是一个愚蠢的问题,但我找不到任何好的解释来解释泛型类型中遵循的命名约定。如果有一个类有两个泛型类型;Java程序员通常这样定义它: 为什么不做一些简单的事情,比如: 我只想问为什么要遵循这样的命名惯例?和背后有什么原因吗?或者这个约定来自其他语言(比如c模板)?