java - T[] toArray(T[] a) 实现

标签 java list toarray

我正在创建一个实现 List 的 SortedList 类。

如果我理解正确,方法 toArray(T[] a) 将对象数组作为参数并返回这些对象的排序数组。

在java文档中,我们可以读到,如果Collection长度大于sortedList,则使用合适的大小创建一个新数组,如果collection长度小于sortedList,则使用该集合的最后一个对象之后的对象集合设置为 null。

我正在从事的项目不允许我在排序列表中使用空值,因此我以不同的方式实现该方法,使用新的sortedList和toArray()方法:

public <T> T[] toArray(T[] a)
{
    SortedList sort = new SortedList();

    for(Object o : a)
    {
        sort.add(o);
    }

    return (T[])sort.toArray();
}

这是实现此方法的好方法还是我应该预期这样使用它会出现错误?

感谢您的宝贵时间。

最佳答案

首先是一个建议:

如果你想要SortedList实现List接口(interface),扩展 AbstractList 是个好主意而不是实现 List直接地。 AbstractList已经定义了许多必要的方法,包括您遇到问题的方法。最List -Java 平台库中的实现也扩展了 AbstractList .

如果您仍想实现List直接,这是该方法应该执行的操作:

a是指定的数组。

  • 如果a足够大,用 SortedList 中的元素填充它(按正确的顺序)而不关心 a 中之前的内容.
  • 如果 a 有空余空间填写完毕后,设置a[size()] = null 。那么用户就会知道列表在哪里结束,除非列表包含 null -元素。
  • 如果列表不适合 a ,创建一个类型为 T 的新数组大小与列表相同,然后填充新的。
  • 返回您填充的数组。如果您填写a ,返回a 。如果您创建了一个新数组,请返回新数组。

此方法有用的原因有两个:

  • 数组不一定是 Object 类型,但是属于 T 类型由用户决定(只要类型有效)。
  • 用户可能希望节省内存并重新使用数组,而不是分配更多内存来创建新数组。

Here Java 文档是如何描述该方法的。

关于java - T[] toArray(T[] a) 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16321308/

相关文章:

java - 从 Eclipse 将 Scala 项目导出为 jar

r - 更改数据框列表中的特定列 - R

java - List 的 toArray 方法以及 List 中对象的运行时类型

python - 分配如何与列表切片一起使用?

java: (String[])List.toArray() 给出 ClassCastException

java - 如何将 HashMap 转换为条目数组

java - 如何在 Swing 中将 DisplayJAI 图像绘制到容器?我想在PaintComponent方法中使用graphics2d将DisplayJAI绘制到Jpanel

java - 谁将像在 C++ 中一样在 Java 中扮演 Friend 函数的角色?

java - 从命令运行 Java。使用 -cp 和不使用 -cp 时发生 Java 错误(JDBC 错误/未找到类)

javascript - 将页面上的 JSON 数据显示为可展开/可折叠列表