前言
数组的特点:
- 数组是相同数据类型的元素的集合。
- 数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。
- 数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如,a[0]表示名字为a的数组中的第一个元素,a[1]代表数组a的第二个元素,以此类推。
用java代码对数组实现以下操作:
- 读取元素
- 更新元素
- 插入元素
- 删除元素
代码实现
package 第二章;
public class No2_1 {
// 定义一个数组类
static class MyArray{
// 定义一个私有数组及数组大小
private int[] array;
private int size;
/**
* 初始化函数
* @param capacity 初始化数组的大小
*/
public MyArray(int capacity){
this.array = new int[capacity];
size = 0;
}
/**
* 查询元素
* @param index 查询的序号
*/
public void query(int index){
if(index >= this.size){
System.out.println("抱歉,您输入的序号超过数组中元素的数量!");
}else{
System.out.println("查询成功,该元素为:" + array[index]);
}
}
/**
* 插入数据
* @param index 插入的位置
* @param element 插入的元素
* @return 失败返回0,成功返回1
*/
public void insert(int index, int element){
// 判断下标是否超出范围
if(index < 0 || index > this.size){
throw new IndexOutOfBoundsException("超出数组实际元素范围!");
}
// 如果实际元素达到数组容量上限,则对数组进行扩容
if(size == array.length){
System.out.println("超过数组长度,自动扩容一倍!");
resize();
}
// 从右向左循环,将元素逐个向右挪一位
for(int i=size-1;i>=index; i--){
array[i+1] = array[i];
}
// 腾出的位置放入新元素
array[index] = element;
size++;
System.out.println("插入成功!");
}
/**
* 重定义数组大小,及扩容
*/
public void resize(){
int[] arrayNew = new int[array.length*2];
// 调用数组复制函数,第一个参数:原数组;第二个参数:起始位置;第三个位置:新数组;第四个参数:起始位置;第五个参数:复制的长度
System.arraycopy(array, 0, arrayNew, 0, array.length);
array = arrayNew;
System.out.println("新数组的容量为" + array.length);
}
/**
* 输出数组
*/
public void output(){
System.out.println("数组的长度为:" + this.size);
for(int i=0; i<size; i++){
System.out.println("第" + (i+1) + "个元素为:" + array[i]);
}
}
/**
* 更新数组
* @param index 更新的位置
* @param element 更新的元素
* @return
*/
public void updata(int index, int element){
if(index > size || index < 0){
throw new IndexOutOfBoundsException("超出数组实际元素范围!");
}
array[index] = element;
System.out.println("更新成功!");
}
/**
* 删除元素
* @param index 删除的位置
*/
public void delete(int index){
if(index > size || index < 0){
throw new IndexOutOfBoundsException("超出数组实际元素范围!");
}
for(int i=index; i<size-1;i++){
array[i] = array[i+1];
}
size--;
System.out.println("删除成功!");
}
}
public static void main(String[] args) throws Exception{
MyArray myArray = new MyArray(4);
myArray.insert(0, 3);
myArray.insert(1, 7);
myArray.insert(2, 6);
myArray.insert(3, 9);
myArray.insert(1, 0);
myArray.output();
myArray.query(1);
myArray.updata(1, 2);
myArray.output();
myArray.delete(1);
myArray.output();
}
}
小结
数组的优点:拥有非常高的随机访问能力。
数组的缺点:插入和杀出都会移动大量元素,影响效率。