1、 数组声明时内存空间存储关系
第一行是一个byte的变量
第二行是byte长度为8的数组(重点:他们是连续的)
第三行是一个short的变量
第四行是一个长度为4的short的数组
第五行是一个int变量
第六行是一个长度为2的int数组
第七行是一个long的变量
……
声明一个变量就是在内存空间划出一块适合的空间
声明一个数组就是在内存空间划出一串连续的空间
我们的数组对象声明后会在栈内存中存储该变量,但是我们存储的只是一个堆内存的引用地址。
我们实际修数组的值是修改堆内存位置的值。
2、 什么是数组
数组的本质是内存中的一串连续的空间
数组是用来存储固定长度的变量的一个整体
可以理解为:
一栋楼房和一个房间的关系
一个房间是一个变量,一栋楼房是一个数组
tips:数组只可以存储声明是规定的类型。
总结
概念:【一组】【类型相同的】【连续的】存储空间的表示
优点:
一个存储单位存多个值
空间连续(遍历)
下标(索引)定位
缺点:
长度固定
类型固定
插入和删除
3、 数组的使用
标准的四步骤:
public class iTest01 {
public static void main(String[] args){
//第一步声明:数据类型[] 数组名称;
String[] nameArray;
//或者你可以写成 String nameArray[];
//第二部初始化:数组名称 = new 数组类型[长度];
nameArray = new String[30];
//第三步赋值:数组名称[下标] = 值;
//下标取值范围:0~names.length-1
//吐过下标越界会报异常:ArrayIndexOutofBoundsException
nameArray[0] = "张三";
nameArray[1] = "李四";
nameArray[2] = "王五";
nameArray[3] = "赵六";
nameArray[4] = "陈七";
nameArray[5] = "刘八";
//第四步使用
System.out.println(nameArray[2]);
}
}
特殊方式:
数据类型[] 数组名称 = {值1,……值n};
String[] nameArray={"张三","李四","王五","赵六","陈七","刘八"};
在一个数组中,如果我们使用一般的声明方式,我们会将数组的整体长度进行声明,并且将所有的值都附上默认初始值。
注意:数组初始化后所有元素都有默认无效值
string:null
char:(char)0
int:0
double:0.0
boolean:false
如果是使用的特殊方式,则会自动将长度变为你写入的长度,不存在默认初始值的问题。
特殊方式二:
int[ ] scores = new int[ ]{89,79,76};
4、 获取数组的总长度
通过数组的变量名称,调用
int[ ] scores = new int[ ]{89,79,76};
//可以获德数组的长度
int i = scores.length;
5、 求最大值
public static void main(String[] args){
//此时我们会声明一个长度为6的int数组,并且将所有位置设置为int类型的默认值0
int[] intArray = new int[6];
//将0-4位赋值12345
intArray[0]=1;
intArray[1]=2;
intArray[2]=3;
intArray[3]=4;
intArray[4]=5;
//打印这个数组
for(int i=0;i<6;i++){
System.out.ptintln("intArray["+i+"]="+intArray[i]);
}
//需要询问用户,我们插入数字到什么位置
System.out.println("请问你需要插入到哪个位置:");
Scanner input = new Scanner(System.in);
int index = input.nextInt();
Syetem.out.println("请问你需要插入的数字是:");
int iNum = input.nextInt();
//循环先将所有的位置向后移动一位
for(int i = (intArray.length-1);i>index;i--){
inArray[i]=intArray[i-1];
}
//将值附到我们的移动位置
intArray[index]=iNum;
//打印一次数组
for(int i=0;i<6;i++){
System.out.ptintln("intArray["+i+"]="+intArray[i]);
}
}
6、 增强遍历for循环
对于数组、集合这类数据类型,我们可以使用增强遍历for循环
使用语法位
for(数据类型 变量名 : 数组名){
//正常使用改变量,如:
System.out.print(变量名);
}
int[] intArray = new int[6];
intArray[0]=99;
intArray[1]=85;
intArray[2]=82;
intArray[3]=63;
intArray[4]=60;
for(int i:intArray){
System.out.println("intArray["+i+"]="+intArray[i]);
}
7、 在已确定顺序的数列中插入一个数字
public static void main(String[] args){
//此时我们会声明一个长度为6的int数组,并且将所有位置设置为int类型的默认值0
int[] intArray = new int[6];
//将0-4位赋值12345
intArray[0]=1;
intArray[1]=2;
intArray[2]=3;
intArray[3]=4;
intArray[4]=5;
//打印这个数组
for(int i=0;i<6;i++){
System.out.ptintln("intArray["+i+"]="+intArray[i]);
}
//需要询问用户,我们插入数字到什么位置
System.out.println("请问你需要插入到哪个位置:");
Scanner input = new Scanner(System.in);
int index = input.nextInt();
Syetem.out.println("请问你需要插入的数字是:");
int iNum = input.nextInt();
//循环先将所有的位置向后移动一位
for(int i = (intArray.length-1);i>index;i--){
inArray[i]=intArray[i-1];
}
//将值附到我们的移动位置
intArray[index]=iNum;
//打印一次数组
for(int i=0;i<6;i++){
System.out.ptintln("intArray["+i+"]="+intArray[i]);
}
}