我正在创建一个实现 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/