【发布时间】:2016-05-19 05:09:14
【问题描述】:
我试图实现我自己的 ArrayList 类以用于教育目的,当我需要让它增长时,我需要将旧的小数组的内容复制到新的更大的数组中。
使用for loop 执行此操作效率非常低,并且需要O(n) time,具体取决于要复制的数组的大小。幸运的是,Java 有 System.arraycopy() 函数,我怀疑它不使用 for loop,而是一次复制整个数组,花费更少的时间。
但是我自己有可能做这种内存拷贝吗?还是说它被埋得太深了,只有java编译器才能做到?
P.S 有很多我不知道如何实现的功能,并且似乎可以使用例如魔术System.out.println() 或套接字来工作。
为了澄清 我只是想知道如何自己做这些优化的内存管理。
【问题讨论】:
-
我认为不可能在 O(1) 时间内复制一个数组。
-
复制数组仍然取决于大小,因为字节需要四处移动,所以即使
System.arraycopy()也会是 O(n) - 由于缺少循环,可能会更快一些。问题是:如果是出于教育目的,性能会起到那么大的作用吗? -
好吧,不是 O(1) 时间,但至少比 for 循环更有效
-
如果您的教育任务是创建自己的 ArrayList,为什么不在内部使用
System.arraycopy()? IMO 没有必要自己做所有事情,尤其是非常低级的事情。 -
您想像真正的那样使用原生 c 函数实现该方法,还是使用普通 java 重新创建类似的方法?