一维数组
数组四要素
标识符、数组元素、元素下标(从0开始)、元素类型
数组的使用
1.声明:
告诉计算机数据类型,声明数组时不规定长度
2.分配空间:
告诉计算机分配几个连续空间数据元素类型不同,元素初始值不同int默认为0、double默认为0.0、string默认为null
3.赋值
4.处理数据
int[] array;//声明数组,或者int array[];
array = new int[5];//分配五个连续空间,数组长度可以是键盘输入的数据
a[0] = 8;//赋值
a[0] = a[0]+10;//处理数据
数组的赋值方法
1.边声明边赋值
int[] array = {0,1,2,3,4};
int[] array = new int[]{0,1,2,3,4};//不能规定数组长度
2.动态的从键盘录入并赋值
int[] array = new int[5];//可以同时声明并分配空间
for(int i=0; i<array.length; i++){
array[i] = input.nextInt();
}
System.out.print(Arrays.toString(array));//输出
如何来遍历数组呢
1.使用for循环来遍历数组下标
2.使用增强型for(foreach)
只能遍历,不能赋值
更安全,不会出现数组越界
int[] array = {0,1,2,3,4};
for(int a:array){//将数组中的元素依次赋值给a
System.out.print(a);
}
变量与内存关系是怎样的
1.数组(引用数据类型)
栈内存:存放数组名,空间有限,速度更快
堆内存:存放元素,空间可扩展
2.普通变量(基本类型)
直接将变量名和变量值存放到栈内存
插入数值并保持降序的原理
1.找到插入位置的下标
2.数组扩容(长度加1)
3.将后面的元素全部往后移一位
从最后一位开始移,从第一位移会导致覆盖后面所有元素
int arr[] = {70,56,20,4,2};
System.out.println("arr:"+Arrays.toString(arr));
int arr1[] = new int[arr.length+1];//重新定义一个数组arr1为插入数后的数组,声明长度为arr长度加1
System.out.println("请输入一个整数:");
int num = input.nextInt();
//int index = 0;
//插入数的下标初始为0,当插入数比所有数都小的时候,应该放在数组最后,会出错,永远不满足arr[i]<=num
int index = arr1.length-1;
//找到插入数的下标
for(int i=0; i<arr.length; i++){
if(arr[i]<=num){
index = i;
break;
}
}
System.out.println("插入的下标为:"+index);
for(int i=0; i<arr.length; i++){//将arr的元素赋值给arr1,未赋值的默认为0
arr1[i] = arr[i];
}
System.out.println("arr1:"+Arrays.toString(arr1));
//将下标index后的数往后挪一位,从后往前挪,如果从前往后,会导致arr[index]被num替换,后面全为num
for(int i=arr1.length-1; i>index; i--){
arr1[i] = arr1[i-1];
}
arr1[index]=num;
System.out.print("插入数"+num+"后arr1为:"+Arrays.toString(arr1));
}