“数组”(Array )是一组按一定顺序排列了多个相同类型数据的集合,使用一个名称命名,并按编号统一管理这些数据。
数组相关的概念:
数组名称元素的索引、下标和索引数组长度:元素个数数组的特点:
数组是按顺序排列属于引用数据类型的数组的变量。 即使是基本的数据类型,在通过引用数据类型创建数组对象时,也无法修改数组的元素,除非内存中确定了整个连续空间数组的长度。数组的分类:
分维)一维数组、二维数组、…、n维数组分数组元素类型)基本数据类型元素数组、引用数据类型元素的数组的一维数组声明和初始化
//正确的方式: int num; 声明num=10初始化int id=1001声明int[] ids初始化//声明//1.1静态初始化:数组初始化和数组元素赋值操作同时执行ids=new int [ ] { 1001,1002,1003,1110 //1.2动态初始化:将数组初始化与数组元素赋值操作分开String[] names=new String[5]; int [ ] arr4={ 1,2,3,4,5 }; //类型估计错误的方法:
//int[] arr1=new int[]; //int[5] arr2=new int[5]; //int [ ] arr3=new int [3] { 1,2,3 };一维数组元素的引用:在拐角目标上调用。
//数组的角点标记(或索引从0开始,以数组长度-1结束。
names[0]='ttdbd '; names[1]='虚拟蛋挞'; names[2]='wwdjw '; names[3]='qpdtd '; names[4]='标致前辈'; //Charat(0)数组的属性:length
system.out.println (names.length ); //5 system.out.println (ids.length; 说明:
数组初始化后,它将确定长度。 arr.length
一旦确定了数组的长度,就无法修改。
4 .一维数组遍历
for(intI=0; i names.length; I ) {
system.out.println(Names[I];
}
5 .一维数组元素的默认初始化值
数组元素为整数: 0
数组元素是浮点型。 0.0数组元素为char型。 0或'u0000 ','0'数组元素不是布尔型。 false数组元素是引用数据类型。 空6维数组的内存分析
二维阵列可以是参照数据类型阵列的元素,也可以是参照数据类型的一维阵列a的元素。 如果仍然是一维数组型,则将该数组a称为二维数组。二维数组的声明与初始化
正确的方法:
int [ ] arr=new int [ ] { 1,2,3 }; //一维数组//静态初始化int [ ] [ ] arr1=new int [ ] [ ] { 1,2,3 },{ 4,5 },{ 6,7,8 }; //动态初始化1 string [ ] [ ] arr2=new string [3] [2]; //动态初始化2String[][] arr3=new String[3][]; //也是正确的写法。 int [ ] arr4[ ]=new int [ ] { 1,2,3 },{ 4,5,9,10 },{ 6,7,8 } }; int [ ] arr5[ ]={ 1,2,3 }、{ 4,5 }、{ 6,7,8 }; //类型估计错误的方法:
//字符串[ ] [ ] arr4=new string [ ] [4]; //string [4] [3] arr5=new string [ ] [ ]; //int [ ] [ ] arr6=new int [4] [3] { { 1,2,3 },{ 4,5 },{ 6,7,8 };如何调用二维数组元素:
system.out.println(arr1[0][1]; //2 system.out.println (arr2[1] [1]; //nullarr3[1]=new String[4]; system.out.println(arr3[1][0]; system.out.println(arr3[0]; //二维数组的属性
system.out.println(arr4.length; //3 system.out.println (arr4[0].length ); //3 system.out.println (arr4[1].length ); //4 遍历二维数组元素
for(intI=0; i arr4.length; I ) for(intj=0; j arr4[i].length; Jj
){System.out.print(arr4[i][j] + " ");}System.out.println();}二维数组元素的默认初始化值
规定:二维数组分为外层数组的元素,内层数组的元素
int[][] arr = new int[4][3];
外层元素:arr[0],arr[1]等
内层元素:arr[0][0],arr[1][2]等
数组元素的默认初始化值
针对于初始化方式一:比如:int[][] arr = new int[4][3];
外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组初始化情况相同
针对于初始化方式二:比如:int[][] arr = new int[4][];
外层元素的初始化值为:null
内层元素的初始化值为:不能调用,否则报错。
二维数组的内存结构
数组常见用法1.数组的创建与元素赋值:
杨辉三角(二维数组)、回形数(二维数组)、6个数,1-30之间随机生成且不重复。
2.针对于数值型的数组:
最大值、最小值、总和、平均数等
3.数组的赋值与复制
3.1 赋值:
array2 = array1;如何理解:将array1保存的数组的地址值赋给了array2,使得array1和array2共同指向堆空间中的同一个数组实体。
3.2 复制:
如何理解:我们通过new的方式,给array2在堆空间中新开辟了数组的空间。将array1数组中的元素值一个一个的赋值到array2数组中。
4.数组元素的反转
5.数组中指定元素的查找:搜索、检索
5.1 线性查找:
实现思路:通过遍历的方式,一个一个的数据进行比较、查找。
适用性:具有普遍适用性。
5.2 二分法查找:
实现思路:每次比较中间值,折半的方式检索。
适用性:(前提:数组必须有序)
6.数组的排序算法
理解:
1)衡量排序算法的优劣:
时间复杂度、空间复杂度、稳定性
2)排序的分类:内部排序 与 外部排序(需要借助于磁盘)
3)不同排序算法的时间复杂度
4)手写冒泡排序
1.数组角标越界异常:ArrayIndexOutOfBoundsException
int[] arr = new int[]{1,2,3,4,5};//for(int i = 0;i <= arr.length;i++){//System.out.println(arr[i]);//}//System.out.println(arr[-2]);//System.out.println("hello");2.空指针异常:NullPointerException
//情况一://int[] arr1 = new int[]{1,2,3};//arr1 = null;//System.out.println(arr1[0]);//情况二://int[][] arr2 = new int[4][];//System.out.println(arr2[0][0]);//情况:String[] arr3 = new String[]{"AA","BB","CC"};arr3[0] = null;System.out.println(arr3[0].toString());小知识:一旦程序出现异常,未处理时,就终止执行。