什么是数组?
数组对应的英文是array,是有限个相同类型的变量组成的有序集合,是最简单,最常用的数据结构。
数据结构的操作无非就是增,删,改,查4种情况:
1. 读取数组
数组在内存中顺序存储,给出一个数组下标即可读取到对应的数组元素。
点击查看代码
package Array;//创建的软件包
package Array;
public class array1 {
public static void main(String[] args) {
int[] arr=new int[]{6,5,4,3,2,1};//创建数组并赋初值
System.out.println(arr[3]);//输出数组下标为3的元素
//输出整个数组元素
for(int i=0;i<=5;i++){
System.out.print(arr[i] + " ");
}
}
}
2.更新元素
直接利用数组下标,就可以把新值赋值给该元素。
点击查看代码
package Array;
public class array2 {
public static void main(String[] args) {
int[] arr=new int[]{1,2,3,4,5,6};
arr[5]=10;//更新第6个元素
System.out.println(arr[5]);
//输出整个数组元素
for(int i=0;i<=5;i++){
System.out.println(arr[i] + " ");
}
}
}
3.插入元素:
插入数组元素的操作存在3种情况:
1.尾部插入:
直接把插入的元素放在数组尾部的空闲位置即可;
2.中间插入:
由于数组的每一个元素都有其固定的下标,所以不得不将插入位置及以后的元素
向后移动一位;
3.超范围插入:
涉及到数组的扩容,此时可以创建一个新数组,长度是旧数组的2倍,再把旧数组的
元素统统复制过去,就实现了数组的扩容。
点击查看代码
package Array;
public class array3 {
//定义对象数组
private int[] arr;
//数组实际元素数量
private int size;
//定义构造方法
public array3(int capacity){ //构造数组长度
this.arr=new int[capacity];
size=0;
}
//数组插入元素方法(index:插入的位置即目标元素的下标;element:新元素)
public void insert(int index,int element) throws Exception{ //抛出异常不做处理
//判断是否超出数组范围
if(index<0||index>size){
throw new IndexOutOfBoundsException("超出数组实际元素范围!!!");
}
//如果是超范围插入
if(size>=arr.length){
resize();
}
//从右到左开始循环,向后移动一位腾出空间
for(int i=size-1;i>=index;i--){
arr[i+1]=arr[i];
}
//将腾出的空间插入新元素
arr[index]=element;
//数组范围自增
size++;
}
//数组扩容(考虑到插入的新元素会超范围)
public void resize(){
//新建一个数组长度为久数组长度两倍
int[] arrNew=new int[arr.length*2];
//从旧数组赋值到新数组
System.arraycopy(arr,0,arrNew,0,arr.length);
//再将新数组赋值给久数组
arr=arrNew;
}
//输出数组方法
public void output(){
for(int i=0;i<size;i++){
System.out.print(arr[i]+" ");
}
}
//主方法
public static void main(String[] args) throws Exception{ //抛出异常不做处理
//给数组分配存储空间
array3 arr=new array3(4);//给数组分配长度为10的存储空间
//插入新元素
arr.insert(0,1);
arr.insert(1,2);
arr.insert(2,3);
arr.insert(3,4);
arr.insert(1,0);
arr.insert(2,1);
arr.deleted(2);
//输出
arr.output();
System.out.println("\nsize的长度为:" + arr.size);
}
}
4.删除元素
和插入元素的操作类似,由于不涉及扩容操作,直接将要删除的元素取出,
赋给deletedElement,删除后从右到左往前移一位。
点击查看代码
//删除数组元素方法(index:表示删除元素的位置)
public void deleted(int index) throws Exception{
//判断删除元素下标是否越界
if(index<0||index>=size){
throw new IndexOutOfBoundsException("访问越界!!!");
}
//将要删除的元素取出
int deletedElement=arr[index];
//从index位置开始往前移动一位
for(int i=index;i<=size;i++){
arr[i]=arr[i+1];
}
size--;
//return deletedElement;
}