我们知道在Java中数组是非基本类型既数组是对象(Object)的子类,所以用下面的这种方式是不能复制该对象的

	public static void main(String[] args) {
int[] arry1 = new int[]{1, 2, 3, 4};
//数组赋值
int[] arry2 = arry1; //一个数组对象,两个引用同时引用该对象
System.out.println(arry1[1]);
System.out.println(arry2[1]);
arry1[1] = 8;
System.out.println(arry2[1]);
}

这样并不能复制数组只是一个简单的赋值操作,下面我们采取另一种方式试一下。

	public static void main(String[] args) {
int[] arry1 = new int[]{1, 2, 3, 4}; int[] arry3 =new int[arry1.length];
for(int i=0; i<arry1.length; i++){
arry3[i] = arry1[i];
}
arry3[1] = 9999;
System.out.println(arry1[1]);
}

其实这个Java API中已经提供了一个非常简便并且效率比较高的方法System.arraycopy(src, srcPos, dest, destPos, length),这个方法的底层是用C++写的,比上面的那种for循环实现拷贝效率要高的多。 JDK 1.6以上提供了Arrays.copyOf(src, length)方法,其实这个方法的底层也是arraycopy方法实现的。

	public static void main(String[] args) {
int[] src = {1, 2, 3, 4};
int[] dest = new int[4]; System.arraycopy(src, 0, dest, 0, src.length);
System.out.println(Arrays.toString(dest));
}
	public static void main(String[] args) {
int[] src = {1, 2, 3, 4};
int[] dest = Arrays.copyOf(src, src.length); System.out.println(Arrays.toString(dest));
}

学过Java和C语言的知道Java的数组对象的大小是固定的,数组对象是不能扩展的,不过我们可以用上面复制数组的方法来实现数组的动态长度。

System.arraycopy()可以复制数组

Arrays.copyOf()可以简便的创建数组副本

	public static void main(String[] args) {
char[] cArr = {'大', '碗'};
char[] temp = Arrays.copyOf(cArr, 4);
temp[2] = '干';
temp[3] = '拌';
System.out.println(Arrays.toString(temp));
}

下面我们通过上面的方法完成一个练习“从一段文字中统计某个字符所有的位置”

package com.dawanganban.test;

import java.util.Arrays;

public class ArrayCopyTest {
public static void main(String[] args) {
String str = "统计一个字符在字符串中的所有位置";
int[] ary = countAll(str, '字');
System.out.println(Arrays.toString(ary));
} /**
* 统计一个字符在字符串中的所有位置的方法
* @param str 被统计的字符串
* @param ch 统计的字符
* @return 位置数组
*/
private static int[] countAll(String str, char ch){
int[] ary = {};
for(int i=0; i<str.length(); i++){
char c = str.charAt(i);
if(c == ch){
ary = Arrays.copyOf(ary, ary.length + 1);
ary[ary.length - 1] = i;
}
}
return ary;
}
}

最新文章

  1. Django models Form model_form 关系及区别
  2. PHP 中 define() 和 const 定义常量时的区别
  3. 软件产品案例分析(K米 APP)
  4. phpunit测试成功 phpunit测试实践代码
  5. paper 101:图像融合算法及视觉艺术应用
  6. ASCII字符集
  7. 欧拉工程第70题:Totient permutation
  8. (IOS)关于Xcode的架构(Architectures)设置
  9. Weka开发[3]-Evaluation类
  10. INI文件的写入与读取
  11. 流畅的python学习笔记:第一章
  12. MyEclipse中好用的快捷键汇总
  13. 浏览器仿EXCEL表格插件 版本更新 - 智表ZCELL产品V1.3.2更新
  14. Port Channel and VPC
  15. 表单数据转javabean对象
  16. flume常见异常汇总以及解决方案
  17. 删除docker下的镜像
  18. Mysql优化系列--Innodb引擎下mysql自身配置优化-转
  19. php下载远程大文件(获取远程文件大小)
  20. 机器学习算法实现解析——libFM之libFM的模型处理部分

热门文章

  1. VIP的转移
  2. 关于腾讯云server使用FTP具体配置教程
  3. HttpWatch--time chart分析
  4. Docker使用Dockerfile创建Centos(tomcat+jdk)镜像
  5. spring接收对象数组实例
  6. Unity3d 布娃娃系统
  7. 【BZOJ 3172】单词
  8. minizlib
  9. [RxJS] Multicast with a selector argument, as a sandbox
  10. php 百度地图 腾讯地图 转换坐标