//格式1: //元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; int[] arr = new int[5]; //格式2: //元素类型[] 数组名 = new 元素类型[]{元素,元素,……}; int[] arr = new int[]{3,5,1,7}; int[] arr = {3,5,1,7};
注意:给数组分配空间时,必须指定数组能够存储的元素个数来确定数组大小。创建数组之后不能修改数组的大小。可以使用length 属性获取数组的大小。
int[] x = new int[3]; x[0] = 1; x[1] = 2; //没赋值x[2]默认是int的默认值0 //另一种定义:该形式可以直接明确数组的长度,以及数组中元素的内容 int[] x = { 1, 2, 3 }; int[] x=new int[]{1,2,3}; //如果数组初始化中不使用运算符new。需要注意:下列写法是错误的。 int[] arr; arr={1,2,3,4,5}; //此时初始化数组,必须将声明,创建,初始化都放在一条语句中个,分开会产生语法错误。 //获取到数组中元素的个数,也就是数组的长度. 数组名.length int[] x = { 1, 2, 3 }; for (int y = 0; y < x.length; y++) { System.out.println(x[y]); } // 这就是数组的第一个遍历操作.
NullPointerException 空指针异常
原因: 引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法。
ArrayIndexOutOfBoundsException 索引值越界。
原因:访问了不存在的索引值。
多维数组:实质就是存储是数组的数组
二维数组:实质就是存储是一维数组。
数组定义:
数组类型[][] 数组名 = new 数组类型[一维数组的个数][每一个一维数组中元素的个数];
int[][] a = new int[2][3]; //相当于定义了2个lenth为3的1维数组 //a[0]代表第一个一维数组,a[1]代表第二个一维数组 //a.lenth表示有多少个一维数组(2个),a[0].lenth表示a[0]这个一维数组的长度(3) //初始化 //静态初始化: int[][] a = new int[][]{ {12,34,45,89},{34,56,78,10},{1,3,6,4} }; //动态初始化: int[][] a = new int[3][4]; for(int i = 0; i<a.lenth ;i++){ for(int j = 0; i<a[j].lenth ;j++){ a[i][j]=(i-1)*j+j; } }
遍历: toString() 将数组的元素以字符串的形式返回
排序: sort() 将数组按照升序排列
查找: binarySearch()在指定数组中查找指定元素,返回元素的索引,如果没有找到返回(-插入点-1) 注意:使用查找的功能的时候,数组一定要先排序
动图演示(图片来源https://forestcat.blog.csdn.net/)
代码实现:
int []arr= {3,2,8,4,7};//创建数组 for(int i=0;i<arr.length-1;i++) { for(int j=0;j<arr.length-i-1;j++) { if(arr[j]>arr[j+1]) { int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } }
稀疏数组可以看做是普通数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组
压缩存储可以节省存储空间以避免资源的不必要的浪费,在数据序列化到磁盘时,压缩存储可以提高IO效率
//原数组 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 //其稀疏数组形式: //第一行存储原始数据总行数,总列数,总的非0数据个数 //接下来每一行都存储非0数所在行,所在列,和具体值 5 8 2 1 2 1 2 4 2