Java(四)数组的学习(2)

数组的简单操作
(一)删除第i号位置的元素

   private void deleteArrayVal(int[] array, int i, int index) {
    		// TODO Auto-generated method stub
    		for(int k=i+1; i<index; ++i){
    			array[k-1] = array[k];
    		}
    	}

(二)数组的扩容
这里代码展示一种,也是最常用的一种。

if(index == array.length){
				
				//把数组的扩容直接封装在函数中    array   2*array.length
				array = resize(array, 2*array.length);
				
				//array = Arrays.copyOf(array, 2*array.length);
				/*int[] array1 = new int[2*array.length];
				System.arraycopy(array, 0, array1, 0, array.length);
				array = array1;*/
			}

数组的扩容还其他几种:
1.System.arraycopy()方法
2.Arrays.copyOfRang(int[] arr, int from, int to );(这个是数组的截取方法)
源数组 arr, 在 [from,to) 范围内的元素。
注意;这几种方法底层调用的都是System.arraycopy()这个方法
源码和实例

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

public class ArrayCopy {
 
    public static void main(String[] args) {
 
        //源数组
        int[] arr = {10,30,40,20,80};
        //调用复制方法
        int[] newArr = arrcopy(arr,10);
        System.out.println(Arrays.toString(newArr));  
    }
    public static int[] arrcopy(int[] original, int newLength ){
        int [] newArr = new int[newLength];
        System.arraycopy(original, 0,newArr, 0, Math.min(original.length,newLength));
        return newArr;
 
    }
}
System.arraycopy(), 方法的最后一个参数,用到了Math,min(), 方法;Math.min(A,B),表示取两者中最小的那个数。 为什么会添加这个方法呢?

因为会存在这样的情况:当被复制的元素的长度 ,大于目标数组时,会报错:java.lang.ArrayIndexOutOfBoundsException

(三)数组任意位置添加一个元素

if(index == array.length){
			//扩容
			array = resize(array, 2*array.length);
		}
		int j=0;
		for(int k=index; k>j; --k){
			array[k] = array[k-1];
		}
		index++;
		array[j] = 200;
		
		System.out.println(Arrays.toString(array));
	}

在添加的时候要先考虑到容量的问题,不够扩容添加。
(四)数组中找出元素是否存在

private int findValue(int[] array, int val) {
		// TODO Auto-generated method stub
		for(int i=0; i<array.length; ++i){
			if(array[i] == val){
				return i;
			}
		}
		return -1;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值