数组的简单操作
(一)删除第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;
}