数组
含义:数组是相同类型数据的有序集合。
特点:
1.长度确定,一旦创建不可改变。
2.元素的类型必须是相同类型,不允许出现混合类型。
3.数组类型可以是基本类型和引用类型。
4.数组有索引的:索引从0开始,到 数组.length-1 结束
5.数组变量属于引用类型,数组也是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,所以数组也在堆中。
//数组声明
int[] arr;
//数组创建
arr= new int[1];
//赋值
arr[0] = 12;
数组的初始化方式总共有三种:静态初始化、动态初始化、默认初始化。
静态初始化:直接在定义数组的同时就为数组元素分配空间并赋值。
int[] arr1 = {1,3,4};
int[] arr2 = new int[]{3,4,5};
动态初始化:数组的定义与赋值分开进行。
int[] arr ;
arr = new int[2]
arr[0] = 11;
arr[1] = 12;
默认初始化:数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。
//数组有默认的初始化值
int[] arr = new int[3];
初始化默认值
args = {String[0]@540}
a1 = {byte[1]@541}
0 = 0
a2 = {short[1]@542}
0 = 0
a3 = {int[1]@543}
0 = 0
a4 = {long[1]@544}
0 = 0
a5 = {float[1]@545}
0 = 0.0
a6 = {double[1]@546}
0 = 0.0
a7 = {char[2]@547}
0 = '\u0000' 0
1 = '\u0000' 0
a8 = {boolean[1]@548}
0 = false
a9 = {String[6]@549}
All elements are null
Arrays工具类
int[] arr = new int[]{2,4,6,3,4};
//toString:将数组元素转成字符串
System.out.println(Arrays.toString(arr));//结果:[2, 4, 6, 3, 4]
/**二分查找binarySearch,找出指定数组中的指定元素对应的索引,如果有相同值会给出第一个值所在索引,但必须有序才能用*/
//sort升序
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.binarySearch(arr, 4));
/**结果:[2, 3, 4, 4, 6]
2
*/
//copyOf复制数组,前面写要复制的数组,后面写复制长度
int[] arr2 = new int[]{2,6,4,8,9};
arr=Arrays.copyOf(arr2,3);
System.out.println(Arrays.toString(arr));
/**结果:[2, 6, 4]
*/
//copyOfRange:区间复制:
int[] newArr2 = Arrays.copyOfRange(arr2,1,4);//[1,4)-->1,2,3位置
System.out.println(Arrays.toString(newArr2));
/**结果:[6, 4, 8]
*/
//fill:数组的填充:
Arrays.fill(arr2,8);
System.out.println(Arrays.toString(arr2));
//结果: [8, 8, 8, 8, 8]
二维数组
实际上是多个一维数组组成,int[3] [4]是个3 行 4 列的二维数组,也就是3个一维数组组成。
int len1=arr.length;行长度,二维数组的长度都是说行长度
int len2=arr[i].length.列长度
int[][] arr = new int[3][];
System.out.println(arr.length);//长度为3
//创建一个数组并赋值给下标为0的数组
arr[0] = new int[]{0,1,2,3};
arr[1] = new int[]{4,5,6};
arr[2] = new int[]{7,8,9};
//对二维数组遍历:
//方式1:外层普通for循环+内层普通for循环:
for (int i=0;i < arr.length; i++){
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+"\t");
}
//每行遍历完成后换行
System.out.println();
}
//方式2:外层普通for循环+内层增强for循环:
//遍历数组长度,然后取出每行一维数组长度的元素值
for (int i = 0; i < arr.length; i++) {
for(int j : arr[i]){
System.out.print(j+"\t");
}
System.out.println();
}
//方式3:外层增强for循环+内层增强for循环:
//外层遍历二维数组共有几个一维数组,然后取出每行一维数组长度的元素值
for(int[] a : arr){
for(int i : a){
System.out.print(i+"\t");
}
System.out.println();
}
//方式4:外层增强for循环+内层普通for循环:
for (int[] a : arr){
for (int i = 0; i <a.length ; i++) {
System.out.print(a[i]+"\t");
}
System.out.println();
}