数组是多个相同类型数据的组合,数组是引用类型。
使用方式1 - 动态初始化:
数组的定义:数据类型 数组名[] = new 数据类型[大小];
数组的使用:数组名[下标/索引];
int temp[] = new int[5]; // 定义
temp[0] = 66; // 根据元素下标赋值
System.out.println(temp[0]); // 输出 66
使用方式2 - 动态初始化:
先声明数组:数据类型 数组名[];
再创建数组:数组名 = new 数据类型[大小];
double temp[]; // 先声明
temp = new double[5]; // 再创建
使用方式3 - 静态初始化:
初始化数组:数据类型 数组名[] = {元素值,元素值...};
int temp[] = {2,4,6,99,5,888,1};
数组使用注意事项和细节:
1:数组是多个相同类型数据的组合,用于实现对这些数据的统一管理。
2:数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
3: 数组创建后,如果没有赋值,则会自动生成默认值:int 0、short 0、byte 0、long 0、float 0.0、double 0.0、char \u0000、boolean false、String null
4:声明数组时,[]放在数据类型后面或放在变量名后面都可以,无差别。
5:使用数组的步骤:①声明数组并开辟空间(new)、②给数组各个元素赋值、③使用数组。
6:数组的下标从0开始
7:数组下标不能越界
8:数组属于引用类型,数组型数据是对象(object)
基本数据类型赋值,这个值就是具体的数据,而且互不影响。数组在默认情况下是引用传递,赋的值是地址。
数组拷贝:
// 将arr1的元素拷贝到arr2数组,要求数据空间是独立的
int[] arr1 = {10,20,30};
// 创建一个新的数组arr2,开辟新的数据空间
int[] arr2 = new int[arr1.length];
// 遍历arr1,把每个元素拷贝到arr2对应的元素位置
for(int i = 0;i < arr1.length;i++){arr2[i] = arr1[i];
}
数组翻转:
// 第一种方式:
// 每次交换时,对应的下标是 arr[i] <=> arr[arr.length - 1 - i]
int temp = 0;
int[] arr = {11,22,33,44,55,66};
for(int i = 0;i < arr.length / 2;i++){temp = arr[arr.length - 1 - i];arr[arr.length - 1 - i] = arr[i];arr[i] = temp;
}
// 第二种方式:
int[] arr = {11,22,33,44,55,66};
int[] arr2 = new int[arr.length];
for(int i = arr.length - 1,j = 0;i >= 0; i--,j++){arr2[j] = arr[i];
}
// 让arr指向arr2数据空间,此时arr原来的数据空间就没有变量引用,会被当做垃圾销毁掉
arr = arr2;
数组扩容:
//实现简单的数组扩容,并给扩容的元素赋值
int[] arr = {1,2,3};
int[] arrNew = new int[arr.length + 1];
for(int i = 0; i < arr.length; i++){arrNew[i] = arr[i];
}
arr[arrNew.length - 1] = 4; // 把4赋给arrNew最后一个元素
arr = arrNew; // 让arr指向arrNew
数组缩减:与数组扩容原理一样,不再赘述。
排序是将多个数据,按照指定的顺序进行排列的过程。
排序分为内部排序法和外部排序法:
1:内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序法、选择式排序法和插入式排序法)。
2:外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括(合并排序法和直接合并排序法)。
冒泡排序法(Bubble Sorting): 通过对待排序序列从后向前,依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒。
// 冒泡排序法示例:
int[] arr = {24,69,80,57,13,-1,-66};
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];arr[j] = arr[j + 1];arr[j + 1] = temp;}}
}
在Java中,常用的查找有两种:顺序查找和二分查找。
什么是二维数组: 元素为一维数组的数组就称为二维数组。
使用方式一 - 动态初始化:
语法:数据类型[][] 数组名 = new 数据类型[大小][大小];
int a[][] = new int[2][3];
使用方式二 - 动态初始化:
先声明:数据类型 数组名[][];
再定义:数组名 = new 数据类型[大小][大小];
int a[][];
a = new int[2][3];
使用方法三 - 列数不确定:
// 创建二维数组,但是只指定一维数组的个数
int[][] arr = new int[3][];
// 遍历arr的所有一维数组
for(int i = 0; i < arr.length; i++){// 给每个一维数组开辟空间,如果没有给一维数组开辟空间,那么arr[i]就是nullarr[i] = new int[i + 1];// 遍历一维数组,并给一维数组的每个元素赋值for(int j = 0; j < arr[i].length; j++){arr[i][j] = i + 1;}
}
// 遍历输出二维数组的值
for(int i = 0; i < arr.length; i++){for(int j = 0; j < arr[i].length; j++){System.out.print(arr[i][j]+" ");}System.out.println("");
}
使用方法4 - 静态初始化:
语法:数据类型 数组名[][] = {{值1,值2...},{值1,值2...},{值1,值2...}};
int[][] arr = {{1,2,3},{6,8,0},{88,99,44}};
二维数组的使用细节:
1:一维数组的声明方式:int[] x 或 int x[]
2:二维数组的声明方式:int[][] y 或 int[] y[] 或 int y[][]
3:二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。