优点:可以通过索引值访问任何的数组元素, 可以实现随机的访问。
缺点:插入/删除元素时, 需要扩容, 复制或者移动大量的元素, 效率比较低。
应用场景:适用于以查询访问为主, 很少进行插入/删除操作的情况。
package com.wkcto.chapter03.demo01;
import java.util.Arrays;
/**
* 在数组中插入元素
* @author 蛙课网
*
*/
public class Test07 {
public static void main(String[] args) {
int [] data = {1,2,3,4,5,6,7};
//在data数组,索引值为3的位置插入元素666
data = insert( data, 3 , 666);
System.out.println( Arrays.toString(data)); //[1,2,3,666,4,5,6,7]
}
//定义方法, 在数组的指定i位置添加一个元素key
public static int[] insert( int [] myArray, int i, int key) {
//1)定义更大的数组
int[] newData = new int[myArray.length+1];
//2) 把[0,i)范围的元素复制到新的数组中
for(int j = 0 ; j < i ; j++){
newData[j] = myArray[j];
}
//3) 把key元素存储到新数组的i位置
newData[i] = key;
//4) 把原数组[i,lenth)范围的元素复制到新的数组的[i+1, length+1)
for( int j = i ; j<myArray.length; j++){
newData[j+1] = myArray[j];
}
// //5) 让原来的数组名指向新的数组
// myArray = newData;
// System.out.println( Arrays.toString(myArray));
//5)返回新的数组
return newData;
}
}
//定义方法,删除数组指定位置的元素, 把myArray[i]元素删除
public static int[] delete(int [] myArray, int i) {
//1)定义更少的数组
int [] newData = new int[myArray.length-1];
//2) 把[0,i)范围 元素复制到新数组中
System.arraycopy(myArray, 0, newData, 0, i);
//3) 把[i+1, length)范围的元素复制到新数组[i,lenth-1)
for( int j = i+1; j < myArray.length; j++){
newData[j-1] = myArray[j];
}
//4) 返回新的数组
return newData;
}