java学习笔记34:数组的拷贝、插入和删除元素本质、数组扩容操作

数组的拷贝

System类里也包含了一个static void arraycopy(object src,int srcpos,object dest, int destpos,int length)方法,该方法可以将src数组里的元素值赋给dest数组的元素,其中srcpos指定从src数组的第几个元素开始赋值,length参数指定将src数组的多少个元素赋给dest数组的元素。
注:容器的底层元素的拷贝,实际上也是数组的拷贝。

【示例7-9】数组拷贝

public class Test {
    public static void main(String args[]) {
        String[] s = {"阿里","尚学堂","京东","搜狐","网易"}; 
        String[] sBak = new String[6];
        System.arraycopy(s,0,sBak,0,s.length);
        for (int i = 0; i < sBak.length; i++) {
            System.out.print(sBak[i]+ "\t");
        }
    }
}

执行结果如图7-5所示:
在这里插入图片描述

代码示例:

package test;

/**
 * 测试数组的拷贝
 */
public class Test {

	public static void main(String[] args) {
		//testBasicCopy();
		//testBasicCopy2();
	
		String[] str = {"阿里", "京东", "百度", "腾讯", "微软"};
		//removeElement(str, 1);    //删除京东
		
		str = extendRange(str);
	}
	
	public static void testBasicCopy() {
		String[] s1 = {"aa","bb","cc","dd","ee"};
		String[] s2 = new String[10];
		  
		/**
		 * System.arraycopy(src, srcPos, dest, destPos, length); 
		 * 参数的意义:从src数组的第srcPos下标开始拷贝,拷贝到dest数组(从destPos下标开始粘贴),拷贝length个长度的元素
		 */
		System.arraycopy(s1, 2, s2, 6, 3);
		
		for(int i = 0; i < s2.length; i++) {
		    System.out.println(i+"--"+s2[i]);	
		}
	}
	
	//测试从数组中删除某个元素(cc)(本质上还是数组的拷贝)(或者可以把String[] s2省略,所有的s2改为s1,结果为aa,bb,dd,ee,ee
	public static void testBasicCopy2() {
		String[] s1 = {"aa","bb","cc","dd","ee"};
		String[] s2 = new String[5];
		  
		System.arraycopy(s1, 3, s2, 3-1, s1.length-3);
		
		//s1[s1.length-1] = null;    //把s1的最后一个元素设为空
		
		for(int i = 0; i < s2.length; i++) {
		    System.out.println(i+"--"+s2[i]);	
	    }
	}
	
	//删除数组中指定索引位置的元素,并将原数组返回(插入和删除类似,只需要调整索引的位置)
	public static String[] removeElement(String[] s, int index) {
		String[] s2 = new String[5];
			  
		System.arraycopy(s, index+1, s, index, s.length-index-1);
			
		s[s.length-1] = null;   
			
		for(int i = 0; i < s.length; i++) {
	        System.out.println(i+"--"+s[i]);	
		}
		
		return s;
    }
	
	//数组扩容(本质上是定义一个更大的数组,然后将原数组内容原封不动的拷贝到新数组中)
	public static String[] extendRange(String[] s1) {
		//String[] s1 = {"aa","bb","cc"};    //数组只能定义一次,长度不能变了
		
		String[] s2 = new String[s1.length + 10];
		
		//将s1中的所有元素都拷贝到s2中
		System.arraycopy(s1, 0, s2, 0, s1.length);
		
		for(String temp : s2) {
			System.out.println(temp);
		}
		
		return s2;
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值