android怎么复制数组,Android NDK开发:Native层实现数组的拷贝

目录

41f584fad955

相关文章

实现意义

使用C++实现数组的拷贝主要是为了提高程序运行的速度。

代码展示

C++代码:

extern "C"

JNIEXPORT void JNICALL

Java_com_itfitness_arraycopy_MainActivity_arrayCopy(JNIEnv *env, jobject instance, jobject arraySrc,

jint srcPos, jobject arraDst, jint dstPos,

jint copyLength) {

//1.先将源数组和目标数组转换成jobjectArray

jobjectArray src_arr = reinterpret_cast(arraySrc);

jobjectArray src_dst = reinterpret_cast(arraDst);

//2.通过循环将源数组的值赋给目标数组

for(int i = srcPos ; i < srcPos + copyLength ; i ++){

jobject element = env->GetObjectArrayElement(src_arr,i);

env->SetObjectArrayElement(src_dst,dstPos,element);

dstPos++;

}

}

Java代码:

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.util.Log;

import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

static {

System.loadLibrary("native-lib");

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Student[] srcStus = new Student[10];

//对源数组的赋值

for(int i = 0 ; i < srcStus.length ; i ++){

String name = "姓名:" + i;

srcStus[i] = new Student(name ,i);

}

//创建目标数组

Student[] dstStus = new Student[srcStus.length];

//进行数组的拷贝

arrayCopy(srcStus,0,dstStus,0,srcStus.length);

//打印拷贝后的数组

for (Student stu : dstStus) {

Log.e("结果:",stu.toString());

}

}

/**

* 数组拷贝

* @param arraySrc 源数组

* @param srcPos 源数组开始拷贝的位置

* @param arraDst 目标数组

* @param dstPos 目标数组开始赋值的位置

* @param copyLength 拷贝的长度

*/

public native void arrayCopy(Object arraySrc,int srcPos,Object arraDst,int dstPos,int copyLength);

}

运行结果

41f584fad955

案例源码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值