数组初始化
1.静态初始化
自己设置初始化值,长度由系统决定
int[] nums=new int[]{1,3,5,7};
or
int[] nums={1,3,5,7};
//第二种必须声明之后马上初始化,一口气写完
system.out.println(nums.length)//数组长度
步骤
1.声明int类型数组 nums;
int[] nums;
2初始化数组
newint[]{1,3,5,7};
3.将初始化数据赋给数组;
new关键字在堆空间开辟一块内存区域,用来存储数据
nums可以引用数组的地址 类似于指针
nums=null
没有引用任何空间
若堆中的内存空间没有被引用,就会被当作垃圾而被回收
2.动态初始化
由我们设置数组元素个数,而每一个数组元素初始值由系统决定
数组元素类型[] 数组名=new 数组元素类型[length];
比如
不同数据类型初始值不同:
-
数值为0(0.0);
-
Boolean为false
-
Char为空
-
String为null
内存:
new分配空间之后,引用数组的地址,全部为0,最后赋值;
在使用nums=null之后,若查找他的长度,会出现空指针异常。
静态/动态初始化不能同时使用。
翻译过来说就是
什么时候使用静态初始化和动态初始化?
-
当我们知道要存的是哪一些数据时,使用静态初始化;
-
但当我们不知道要存的是什么,使用动态初始化;
-
数组初始化之后不能改变长度,若需要改变,则需要重新初始化。
二、数组基本操作
1.获取/设置/遍历元素等
①获取元素:元素类型 变量=数组名[index];//index是索引
②设置元素:数组名[index]=值
③遍历数组元素:以num1为例;
④数组长度:int len=数组名.length;//length是属性不是方法
⑤索引范围:从0开始,逐一递增[0,数组名.length-1]
2.操作数组时常见异常
NullPointerException:空指针异常(空引用)
当数组还未初始化,直接操作数组出现的错误,比如获取长度(不是打印)
但是打印却可以(null)
ArrayIndexOutOfBoundException
索引越界
3.获取最大/最小元素(数值型数组)
先猜第一个值为最大(小)值
4.按格式打印数组元素
直接打印数组时,打印出来的是hashcode值
但我们想打印的是特殊格式元素的值
方法本体:
使用:
//null1是类名称。
5.逆序排列数组元素
①创建新数组存储逆序后数组
②索引交叉排序
6.元素出现索引(第一次indexof/最后一次lastindexof)
①是否存在?
②第一次:从前往后,第二次反之
从前往后
同理 从后往前
线性查找效率低下