数组
1、定义:
用于存储多个相同类型数据的存储模型。
2、格式:
(1)数据类型[] 数组名;
如:int[] arr;//定义了一个int类型的数组,数组名是arr
(2)数据类型 数组名[];
如:int arr[];//定义了一个int类型的变量,变量名是arr
3、初始化:只定义数组长度,由系统分配内存空间
(1)动态初始化:
//new关键字代表在内存空间中申请对应的内存,优先级别最高,也表示这是一个引用类型。
格式:数据类型[] 数组名=new 数据类型[数组长度];
数据类型[] 数组名;//声明数组
数组名=new 数据类型[数组长度];//分配空间
赋值:数组名[下标值];
下标值(索引)特点:
从0开始,连续,逐一增加、每次加一
如:arr[0]=89;
(2)静态初始化:
格式:数据类型[] 数组名=new 数据类型[]{数据1、数据2、数据3....};
如:int[] arr=new int[]{1,2,3};
或int[] arr={1,2,3};
(3)数组在初始化时,会为存储空间添加默认值
整数(byte/short/int):0
整数(long):0L
浮点数(double):0.0
浮点数(float):0.0f
布尔数:false
字符:空字符('\u0000')
每一个new出来的东西都有一个地址值,使用完毕,会在垃圾回收器空闲时被回收。
4、内存分配:
如:int[] arr=new int[3];//int[] arr分配在栈内存中,new int[]分配在堆内存中。
5、数组元素访问
数组变量访问方式:
格式:数组名
数组内部保存的数据的访问
格式:数组名[下标值]
6、数组操作常见问题
索引越界:访问了数组中不存在的索引对应的元素,造成月结问题。
空指针异常:访问的数组已经不再指向堆内存中的数据。
null:空值,引用数据类型的默认值,表示不指向任何有效对象。
7、数组常见操作
(1)数组长度计算:
数组名.length;
(2)遍历
访问数组中每一个元素并输出在控制台
格式:
int[] arr={......}
for(int x=0;x<arr.lengh;x++){
System.out.println(arr[x]);
}
(3)使用增强for和fori遍历数组异同点
在遍历数组功能方面,没有区别
但增强for无法同时修改数组的元素值(应用于基本数据类型)
(4)求最值的逻辑
定义一个变量存储最值,让该变量与数组中每一个元素进行比较,
如果该变量不满足最值逻辑,则该变量将该元素赋值为新值。
(5)在一个有序数组中插入一个值,并保证数组依然有序的逻辑(插入逻辑)
从后向前将该元素和数组中的元素依次比较(用循环实现)
比该值小的元素,要想后移(a[i+]=a[i])
如果元素比该值大,则该值插入在该元素的后方(a[i+1]=num)
如果循环运行结束,该值都没有插入,则该值要插入在数组首位(a[0]=num)
-->通过flag的方式来判断:是否循环结束都没有插入。
8、二维数组
格式:
int[][] array=new int[][]{{1,2,3},{1,2,3}}
数组长度计算:
行数:array.length;
列数:array[行下标].length;//array[0].length;
Arrays类
8、Arrays类
8.1 定义:Arrays类是JDK中提供的用来操作数组的工具类,位于java.util包中。
8.2 Arrays类常用方法
(1)equals(array1,array2)
返回值为boolean类型,比较两个数组是否相等
(2)sort(array)
返回void类型,对数组arraya中元素进行升序排列
(3)toString(array)
返回String类型,将一个数组转换成一个字符串
(4)fill(array,val)
返回void类型,把数组array的所有元素都赋值为val
(5)copyOf(array,length)
返回值类型与 数组类型一致,把数组array赋值成一个长度为length的新数组
(6)binarySearch(array,val)//前提是数组为升序排列
返回值为int类型,查询val元素在数组array中的下标
8.3 Arrays类调用方法
如:Arrays.sort(array);