java数组
Posted 伸手挽明月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java数组相关的知识,希望对你有一定的参考价值。
什么是数组
- 同一种类型数据的集合。其实数组就是一个容器。
- 数组里的每个数据就是一个元素,可以用下表来访问(下标从0开始)
数组的生命和创建
//格式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;
}
}
Arrays的使用
遍历: 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
以上是关于java数组的主要内容,如果未能解决你的问题,请参考以下文章
错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”