数组
概念:存储数据容器,数组会在内存中开辟一块 连续,大小相同 的空间,每个空间相当于之前的一个变量,称为数组的元素。数组的长度一经确定,就无法再改变
一. 特点
1、只能存储同一种数据类型
2、长度固定
3、直接打印数组名,打印的是数组在堆内存中的地址
4、数组在创建后,都会根据类型赋予初始值,
整型:0
浮点型:0.0
布尔型:false
字符型:null,\u0000,控制台中以一个空格显示
其他(引用类型):null
二. 创建
[]的位置可以放在数据类型之后,也可以放在数组名之后
2.1 静态创建
格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,...};
变形:
数据类型[] 数组名 = {元素1,元素2,元素3,...};
注:当编码完成时,这个数组的长度就固定了,在编译运行期间不能再对数组的长度进行改动,即不能对数组的元素进行增删
2.2 动态创建
格式:
数据类型[] 数组名 = new 数据类型[长度];
数据类型 数组名[] = new 数据类型[长度];
2.3数组在创建过程中内存分配的情况
三. 数组中元素的获取和赋值
格式:数组名[下标]
下标:索引、角标,范围是0~长度-1
获取数组的长度:数组名.length
赋值:数组名[下标] = 值;
四. 数组的遍历
1、借助Arrays工具类的toString(),将数组以字符串的形式输出
2、循环遍历
int[] arr = {x,x,x,x,...};
for(int i = 0; i <= arr.length - 1 ;i++){
arr[i]
}
五. 存在的问题
1、ArrayIndexOutofBoundsException,数组下标越界异常
原因:数组的下标的范围是0~长度-1,如果下标出现了负数或者超过了长度-1,就会发生此异常
解决:使下标处于合理范围内
2、NullPointerException,空指针异常
原因:数组对象没有new过就使用
解决:new它
六. 数组排序
6.1 冒泡排序
冒泡法,两两比较,如图所示:
int[] brr = {1,5,3,-8,2,6,-2};
for(int i = 0;i< brr.length - 1;i++){
for(int j = 0; j<brr.length-1 - i; j++){
if(brr[j] > brr[j+1]){
int t = brr[j];
brr[j] = brr[j+1];
brr[j+1] = t;
}
}
}
6.2 选择排序
选择排序找出最小(大)值,找到后记录下标,和第一个互换,依次类推:
int[] crr = {1,3,22,4,-11,5,8};
int minIndex;
for(int i = 0;i < crr.length - 1;i++){
minIndex = i;
for(int j = i + 1; j < crr.length;j++ ){
if(crr[minIndex] > crr[j]){
minIndex = j;
}
}
int t = crr[i];
crr[i] = crr[minIndex];
crr[minIndex] = t;
}
二维数组
概念:存储数组元素的数组
一. 创建
1、
数据类型[][] 数组名 = new 数据类型[小数组的个数][每一个小数组的长度];
2、
数据类型[][] 数组名 = new 数据类型[小数组的个数][];
这种创建方式的二维数组中的小数组,需要单独进行创建。
3、
数据类型[][] 数组名 = {
{元素1,元素2,...},
{元素1,...},
{元素1,元素2,元素3,...},
...
};
二. 遍历
for(int i = 0;i <= arr.length - 1;i++){
for(int j = 0;j<=arr[i].length - 1;j++){
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}