В любом учебники или статьях что читал написано, что любая реализация arrayCopy будет уступать нативной. Но вот простое опровержение, как не крутил вертел параметрами, всегда моя реализация была 25-50% быстрее.
Вопрос: почему в java все еще никто не додумался изменить свой метод на более быстрый и простой?
Тестил раз 1000, несите прям в oracle
public class TestArrayCopy{
public static void main(String[] args) {
int N=550;
long s;
int SIZE=10000011;
int[]arr1=new int[SIZE];
int[]arr2=new int[SIZE];
{
for(int i=0;i<SIZE;i++){
arr1[i]=i;arr2[i]=i;
}
}
int[]dest1=new int[SIZE];
int[]dest2=new int[SIZE];
int startPos=100;
int pos=10;
int num=SIZE-startPos-22;
s=System.currentTimeMillis();
for(int i=0;i<N;i++)
System.arraycopy(arr1, startPos, dest1,pos, num);
System.out.println("System.ArrayCopy() time = "+(System.currentTimeMillis()-s));
s=System.currentTimeMillis();
for(int i=0;i<N;i++)
arrayCopy(arr2, startPos, dest2,pos, num);
System.out.println(" arrayCopy() time = "+(System.currentTimeMillis()-s));
// System.ArrayCopy() time = 6453
// arrayCopy() time = 4455
}
public static void arrayCopy(Object src,int startPos,Object dest,int pos,int num){
if(num>dist.length-pos || src.length-startPos<num){
throw new IllegalArgumentException("...");
if(src instanceof int[])
arrayCopyInt((int[])src, startPos, (int[])dest, pos, num);
else if(src instanceof double[])
arrayCopyDouble((double[])src, startPos, (double[])dest, pos, num);
}
public static void arrayCopyInt(int src[],int startPos,int[] dist, int pos,int num){
for(int i=pos;i<num;i++){
dist[i]=src[startPos++];
}
}
}