数组
概念:存储数据的容器
## 一、 特点
1、只能存储同一种数据类型
2、长度固定
3、直接打印数组名,打印的结果是数组在堆内存中的地址
4、数组创建后,都会根据其数据类型赋予默认值
整型:0
浮点型:0.0
布尔型:false
字符型:u0000 控制台中以一个空格显示
其他(引用数据类型): null
## 二、 创建
[]的位置可以放在数据类型之后,也可以放在数组名之后
### 2.1 静态创建
格式:
数据类型 [] 数组名 = new 数据类型 []{元素1、元素2、、、、};
变形:
数据类型 [] 数组名 = {元素1、元素2、、、、};
注:当编码完成时,数组长度固定,在编译运行期间,不能再对数组进行改动,即不能对数组元素进行增删
### 2.2 动态创建
格式:
数据类型 [] 数组名 = new 数据类型 [长度];
## 三、数组中元素的获取、赋值
格式:
数组名[下标]
下标:索引、角标, 范围是 0~长度-1
获取数组的长度: 数组名.length 例如 arr.lengths
赋值:数组名[下标] = 值;
## 四、 遍历
1、借助Arrays工具类的toString(),将数组以字符串的形式输出
2、循环遍历
int arr[] = {x,x,x,x,x,x};
for(int i = 0 ; i < arr.lenght; i++){
//输出
System.out.println(arr[i]);
}
## 五、 存在的问题
1、ArrayIndexOutofBoundsException, 数组下标越界异常
数组的下标的范围是0~长度-1,不在这个区间内,都会发生异常
注意下标要在合理的范围内
2、NullPointerException, 空指针异常
数组对象没有new过就使用
## 六、 数组排序
### 6.1 冒泡排序
即相邻元素作比较,满足交换条件则交换,得到当前最值
找第一个最值时,不能省略次数
找第二个最值是,可以省略一次
找第三个最值时,可以省略两次
。。。。。
int [] arr = {12,53,23,87,66,54,88};
int temp = 0;
for (int i = 0; i < arr.length-1; i++) {
for(int j = 0; j < arr.length-1-i; j++){
if(arr[j]<arr[j+1]){
temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
### 6.2 选择排序
1、从第一个元素开始,将每一个与后续的所有元素进行比较
2、当得到最值时,与第一个元素进行交换
3、在剩下还未排序的元素中,从第一个元素开始
将每个元素与后续的所有元素进行比较
当得到最值是,与当前的第一个元素进行交换
int [] arr = {99,88,77,66,55,44,33,22,11};
int temp;
int minIndex;
for (int i = 0; i < arr.length-1; i++) {
minIndex = i;
for(int j = i+1;j< arr.length;j++){
if(arr[minIndex] > arr[j]){
minIndex = j;
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
System.out.println(Arrays.toString(arr));
}
二维数组
概念:存储数组元素的数组,即每个元素都是一个数组
## 一、创建
1、
数据类型 [][] 数组名 = new shu数据类型[①][②];
①:二维数组的长度
②:每一个小数组的长度
2、数据类型[][]数组名 = new 数组类型[①][];
3、数据类型[][] 数组名 = {}
{元素1,元素2,。。。。。},
{元素1,元素2,。。。。。},
{元素1,元素2,元素3.。。。。}
};
这种方式创建的二维数组中的小数组要单独创建