数组
第一节:数组的概念
一组连续的存储空间,存储多个相同数据类型的值
1.1数组的特点:
1、长度固定。 当创建的数组分配长度后,则该数组长度固定不变
2、类型相同 数组在创建初给定的类型,则数组当中存放的数据一定是该类型、统一
1.2数组的创建
一、声明并分配空间
1.2.1先声明、再分配空间
例:
int[] a;
a = new int[5];
//先声明一个int类型的数组a,再为其分配长度为5的存储空间
1.2.2声明并分配空间
例:
int[] a = new int[5];
//声明一个int类型的数组a,并为其分配长度为5的存储空间
1.2.3声明并赋值 (繁)
例:
int[] a = new int[]{4,3,5,2,1};
//声明一个int类型的数组a,其长度由{}里的数组的元素个数来决定。
1.2.4声明并赋值 (简)
例:
int[] a ={4,3,5,2,1};
//声明一个int类型的数组a,其长度也是由{}里的 数组的元素个数来决定。
这种方式对比1.2.3里,步骤简写。择自己习惯来决定使用哪种方式
1.3数组的组成
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z2M7ePvw-1589093436956)(E:\1905_06\笔记\数组的组成.png)]
1.3.1数组中每个数据格都是数组的元素。
1.3.2对数组中每个元素的赋值或取值,都称为对元素的访问
1.3.3访问元素时,需要使用下标(从0开始,依次+1,自动生成)
1.3.4访问的语法: 数组名[下标] //a[1] 访问的是a数组中第二个元素
1.4数组的遍历
从头到尾,逐一对数组中的每个元素进行访问
例:
int[] a = {4,3,5,2,1};
for(int i = 0; i <a.length;i++){//初识部分从0开始,是因为数组的下标就是从0开始
System.out.println(a[i]);
}
a.length 是用于获取数组的长度(数组元素的个数)
最后一个位置的元素的下标是数组的长度-1
注意:数组的下标为0~数组的长度-1,如若超出这个范围,则会报:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1FHuxqLE-1589093436957)(E:\1905_06\笔记\数组下标越界.png)]
特别注意:
常用数组的默认值
int ------0
double -----0.0
char --------’\u0000’
boolean- ------- false
String ------- NULL
第二节:数组的扩容
当创建数组时,必须显示指定长度,并且在创建之后长度不可改变
扩容:
1、创建一个大于源数组的新数组
2、把原数组的元素依次复制到新数组。
2.1通过循环的方式:
//old数组
int[] old = new int[]{4,3,5,2,1};
//1.创建新数组
int[] xin = new int[old.length * 2];
//2.把old数组的数组元素赋给新数组
for(int i =0;i<old.length;i++){
xin[i] = old[i];
}
old = xin;//把新数组 给 旧数组 替换
for(int j = 0;j<oldArrays.length;j++){
System.out.println(oldArrays[j]);
}
System.out.println();
2.2System.arraycopy();
//old数组
int[] old = new int[]{4,3,5,2,1};
int[] xin = new int[old.length*2];
// 源 起 目 起 源长度
System.arraycopy(old,0,xin,0,old.length);
old = xin;
for(int i = 0;i<old.length;i++){
System.out.println(old[i]);
}
2.3java.util.Arrays;使用Arrays帮助类
public static void main(String[] args){
int[] old = {4,3,5,2,1};
int[] xin = expand(old,old.length*2);
old = xin;
for(int i = 0;i<old.length;i++){
System.out.println(old[i]);
}
}
//但凡要改变数组的长度,请调用我
//要改变的数组 改变之后的长度
public static int[] expand(int[] arrays,int length){
int[] newArrays = Arrays.copyOf(arrays,length);
return newArrays;
}
地址的替换:
数组作为引用类型之一,其变量存放的是地址。
当新数组复制给旧数组的时候,旧数组的地址发生了改变。原数组的地址不再引用。进入闲置隔一段时间之后会进行收回。(时间不定)
第三节:数组应用场景
3.1数组作为函数的参数
//数组作为函数的参数,接收调用者传递的实参,实际拿到的是地址
public static void printArrays(int[] oldArrays){
for(int j = 0;j<oldArrays.length;j++){
System.out.println(oldArrays[j]);
}
System.out.println();
}
3.2数组作为函数的返回值
public static int[] expand(int[] arrays,int length){
int[] newArrays = Arrays.copyOf(arrays,length);
return newArrays;
}
//数组作为函数的返回值,返回给调用者的是新数组的地址。
}
### 3.2数组作为函数的返回值
```java
public static int[] expand(int[] arrays,int length){
int[] newArrays = Arrays.copyOf(arrays,length);
return newArrays;
}
//数组作为函数的返回值,返回给调用者的是新数组的地址。