Java SE 笔记
五、数组
1.数组概述
- 具有相同数据类型的数据的集合
- 可以存储基本类型的数据和引用类型的数据
- 数组是在内存中分配的一连串的空间
2.数组声明
- 数组的声明方式:type var[] 或 type[] var;
例如:
int a[];
int[] a1;
double b[];
String []c; - Java语言中声明数组时不能指定其长度(数组中元素的数)
例如:
int a[5]; //非法
2.数组的初始化 - 当定义数组赋值数据时,数组中根据数据类型存入相应的默认值
- 可以在定义数组时就进行初始化值
静态初始化:
动态初始化:
数组元素的默认初始化
- 数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化。
例如:
int a[]= new int[5];
System.out.println(a[3]);
0
数组元素的默认初始值
3.数组元素的使用
- Java中使用关键字 new 创建数组对象
- 定义并用运算符 new 为之分配空间后,才可以引用数组中的每个元素;
- 数组元素的引用方式:数组名[数组元素下标]
- 数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i];
- 数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 - n-1;
- 如int a[]=new int[3]; 可引用的数组元素为a[0]、a[1]、a[2]
- 每个数组都有一个属性 length 指明它的长度
- 例如:a.length 指明数组 a 的长度(元素个数)
注意:如果获取的元素比分配的元素多,就会出现数组越界异常(ArrayIndexOutOfBoundsException)
4.数组的使用
- 使用循环结构遍历数组,一般不适用for循环
- 要素:变量从0开始,小于数组的长度
- 根据数组的长度不同去修改i的取值范围,可以使用数组中length属性,获得数组长度
for(int i=0;i<9;i++){
for(int i=0;i<b.length;i++)
System.out.println(b[i]);
}
- 使用循环语句对数组插入数据
- 定义10个长度的数组,用来存储身高数据,从控制台输入身高,打印数组
Scanner sc = new Scanner(System.in);
int[] height = new int[10];
for(int i=0;i<height.length;i++){
System.out.println("请输入身高");
height[i] = sc.nextInt();
}
for(int i=0;i<height.length;i++){
System.out.print(height[i]+"、");
}
请输入身高
162
请输入身高
170
请输入身高
175
请输入身高
172
请输入身高
160
请输入身高
165
请输入身高
163
请输入身高
167
请输入身高
159
请输入身高
180
162、170、175、172、160、165、163、167、159、180、
5.数组的操作
数组的复制和排序
System.arraycopy(source,srcPos,dest,destPos,length)
-
复制source数组中从下标srcPos开始的length个元素到自然目标数组dest,并从目标数组的下标数组的下标为destPos的位置开始存储
- source:源数组
- srcPos:源数组中的起始位置
- dest:目标数组
- destPos:目标数组中的起始位置
- length:要复制的数组元素的个数
-
对数组进行排序,复制和遍历
int[] array = {23,44,3,234,26,5,2,1,51,6,45,21,532,215,39};
int[] newarray = Arrays.copyOf(array, array.length);
Arrays.sort(array);
for(int i=0;i<array.length;i++){
System.out.print(array[i]+";");
}
System.out.println();
for(int i=0;i<newarray.length;i++){
System.out.print(newarray[i]+";");
}
1;2;3;5;6;21;23;26;39;44;45;51;215;234;532;
23;44;3;234;26;5;2;1;51;6;45;21;532;215;39;
6.冒泡排序
- 冒泡排序法是一种简单的排序算法
- 它重复地走访过要排序的数组,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数组的工作是重复地进行直到没有再需要交换,也就是说该数组已经排序完成。
按照上面的规律,要讲n个元素排序,其核心代码如下:
int[] a = {9,8,5,4,2,0};
int n = 6;
for(int i=1;i<n;i++){
for(int j=0;j<n-i-1;j++){
if(a[j]>a[j+1]){
int t = a[j];
a[j] = a[j+1];
a[j+1]=t;
}
}
}
for(int k=0;k<n;k++){
System.out.print(a[k]+",");
}
2,4,5,8,9,0,
7.多维数组
- Java中没有真正的多维数组,只有数组的数组
锯齿数组 - Java中多维数组不一定是规则矩阵形式
多维数组的创建
数组类型 数组名[][] int a[][];
数组类型[][] 数组名 int[][] b;
数组类型[] 数组名[] int[] c[];
数组名 = new 数据元素类型[行数][列数];
数组名 = new 数据元素类型[行数][];
例如:
a = new int [3][4];
a = new int [3][];
a = new int [][4];
多维数组初始化
数组类型 数组名[][] = {{元素11,元素12,…},{元素21,元素22,…}}
数组类型 数组名[][] = new 数据类型[][]{{元素11,元素12,…},{元素21,元素22,…}}
例如:
int a[][] = {{1,2,3},{4,5},{7}};
int a[][] = new int[][] {{1,2,3},{4,5},{7}};
二维数组举例:
-
静态初始化:
int intArray[][] = {{1,2},{2,3},{3,4,5}};
int intArray1[3][2] = {{1,2},{2,3},{4,5}};
//illegal,等号左边不能指定维数 -
动态初始化
int a[][] = new int[4][5];
int b[][] = new int[3][]
b[0] = new int[2];
b[1] = new int[3];
b[2] = new int[5];
二维数组的应用
- 存储用户名密码,当存储用户名和密码的时候,对应匹配,可以使用二维数组
- 语法:
二维数组的遍历
int[][] a = {{1,2,3,4},{4,3,2,1},{5,6,7,8,9}};
for(int i=0;i<a.length;i++){
int[] b = a[i];
for(int j=0;j<b.length;j++){
//System.out.println(b[j]);
System.out.println(a[i][j]);
}
}