首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 系统运维 >

动态数组:java.lang.System停的arraycopy和java.util.Arrays.copyOf方法

2013-03-26 
动态数组:java.lang.System下的arraycopy和java.util.Arrays.copyOf方法java.lang.System下的arraycopy和j

动态数组:java.lang.System下的arraycopy和java.util.Arrays.copyOf方法
java.lang.System下的arraycopy和java.util.Arrays.copyOf方法

(1) java.lang.System.arraycopy

public static native void arraycopy(Object src,  int  srcPos, Object dest, int destPos, int length);

问题:方法没有任何的实现,具体是如何实现的呢?

以下是关于该方法具体的说明:





与此同时,java.util.Arrays 还重载了很多copyOf 方法:



可见,每次添加元素时,JDK 都会先检查数组elementData 的容量是否已经满了,如果满了,就会调用Arrays.copyOf 方法,用elementData 中的元素和新数组的长度构造一个新的数组,并重新赋值给elementData 数组。此处不难看出,由于需求是把长度已经增长了的elementData 数组重新赋值给elementData ,故直接使用System.arraycopy 方法是不适合的。

另外,新数组长度的改变也是有讲究的,JDK 的设计是每次有新的扩展数组长度的需要到来时,就按int newCapacity = (oldCapacity * 3)/2 + 1; 的算法构造新数组的长度,不难看出,这种算法构造出来的新的数组长度的增量都会比上一次大( 而且是越来越大) ,即认为客户需要增加的数据很多,而避免频繁newInstance 的情况。

下面再来看ArrayList 中的toArray 方法



如果不采用动态数组策略,将会抛:
 

热点排行