数组
一、.数组
1、定义:数组类型[] 数组名 = new 数据类型[整数];
整数:数组的长度
int[] arr = new int[8];
arr是数组类型的变量(如果是引用数据类型习惯上叫引用),new int[8]真正的数据存储在堆中,新创建的数据的每一个位置上的值都是其所属数据类型的默认值,数组的索引是从0开始
整数类型(byte,short,int,long)的默认值都 0
小数(float,double)的默认值都是 0.0
布尔数据类型(boolean)的默认值都是 false
字符数据类型(char)的默认值都是 ‘ ’
基本数据类型的变量都存储在栈中,栈的特点是存储空间小,但是存取速度快,先进后出
引用数据类型所占的空间比较大,存储在堆中,堆的特点,空间大,存取的速度较栈慢
//给数组里面的数据来设置值
arr[0] = 22;
arr[1] = 55;
arr[2] = 6;
arr[3] = 8;
rr[4] = 99;
arr[5] = 9;
arr[6] = 19;
arr[7] = 221;
//数组的下标不要越界使用,否则会报错
//arr[8] = 11;
/*
数组是引用数据类型,引用数据类型有可能发生空指向的问题
引用数据类型可以赋值成null,这就代表是空指向
int[] arr = null;
*/
2、数组的三种定义方式
数组的另外两种定义方式
2.2语法:数据类型[] 数组变量名 = {值1,值2,...}
int[] array = {12.34,56...};
数组的长度由value的数量来决定
2.3语法:数据类型[] 数组变量名 = new 数据类型[]{值1,值2,...}
int[] array = new int[] {12.34,56...};
数组的长度由value的数量来决定
printArr();是一个函数,他需要传入一个参数
一般情况下
int[] arr = new int[8];
printArr(arr);
不方便定义数组名字的情况下
第三种第一方式派上用场,如printArr(new int[] {12.34,56...});
所以第三种方法适合传递匿名的常量数组
数组的应用
3、求极值
calss Demo{
public static void main(String[] args){
itnp[] arr = {12,4,5,6,78,84,24};
int result = max(arr);
System.out.println(result);
}
public static int max(int[] arr){
//定义一个最大值的结果变量
int maxValue = -1;
//为了程序的严谨性,一定要判断null和0长度的问题
if(arr != null && arr.length != 0){ //arr != null && arr.length != 0的顺序不能颠倒,因为若是颠倒,程序变为arr.length != 0 && arr != null 若是存在空指向问题,则不知道数组的长度arr.length != 0将会报错
for(int i = 0 ; i < arr.length ; i++){
//如果遍历的数组中的值比最大值变量大的话,需要更换
if(arr[i] > maxValue){
maxValue = arr[i];
}
}
}
return maxValue;
}
}
4、冒泡排序
calss Demo{
public static void main(String[] args){
itnp[] arr = {23,25,12,7,51};
sortPop(arr);
for(int i = 0 ; i < arr.length ; i++){
System.out.print(arr[i]+"\t");
}
}
public static void sortPop(int[] arr){
if(arr != null && arr.length != 0){
//外层循环是轮数
for(int i = 0 ; i < arr.length-1 ; i++){
//内层循环是每一轮比较的次数
for(int j= 0 ; j < arr.length-i-1 ; j++){
if(arr[j+1] > arr[j]){
//定义一个临时变量
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
}
}
5、数组的倒置
calss Demo{
public static void main(String[] args){
itnp[] arr = {23,25,12,7,51,34,66,789};
reverseArr(arr);
for(int i = 0 ; i < arr.length ; i++){
System.out.print(arr[i]+"\t");
}
}
public static void reverseArr(int[] arr){
for(int j= 0 ; j < arr.length/2 ; j++){
//交换对称的数
int temp = arr[arr.length-1-i];
arr[arr.length-1-i] = arr[i];
arr[i] = temp;
}
}
6、二维数组