数组的定义
数组的两种声明方式:
1.声明数组的时候数组并没有真正的被创建
2.构造一个数组必须指定长度
3.声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关
4.数组也是对象,数组中的元素相当于对象中的属性
数组的初始化
1.默认初始化:整形数组由系统默认初始化为0;浮点型数组由系统默认初始化为0.0;布尔型数组由系统默认初始化为false;引用类型由系统默认初始化为null。
int[] arr= new int[10];//系统默认初始化为0
2.静态初始化:
静态初始化需要在声明后直接初始化
int[] a={1,2,3};//基本数据类型数组静态初始化
Student[] std={new Student(),new Student()};//引用类型数组静态初始化
3.动态初始化:根据索引直接赋值
int[] arr= nrw int[5];//确定数组长度,默认初始化数组
arr[0]=1;
arr[4]=4;//动态初始化数组元素
数组的遍历
//遍历数组
for(int i=0;i<stu.length;i++){
System.out.println(stu[i]);//如果未重写toString方法,输出数组的字节码信息
}
//增强for循环遍历数组stu1(用于读取元素的值),无法操作索引
for(Students stu2:stu1){
System.out.println(stu2);
}
//增强for循环等价于如下for循环
for(int i=0;i<stu1.length;i++){
Students stu2=stu1[i];
System.out.println(stu2);
}
数组的拷贝
/**
* 测试数组拷贝,
* @author TheMutents
*
*/
public class Array_Test_01 {
public static void main(String args[]){
String[] s=new String[5];
String[] ss={"The","Mutents","is","the","writter"};
System.arraycopy(ss,0,s,0,5);//System类下的方法,该方法为静态方法,用来拷贝数组
for(int i=0;i<s.length;i++){
System.out.println(s[i]+"\t");
}
}
}
import java.util.Arrays;
/**
* 测试java.util.Array类(操作数组的工具类)
* 该类包含了排序、排序、填充、打印内容等常见操作
* @author Lhk
*/
public class Array_Util_Class {
public static void main(String args[]){
int [] a={145,151,130,110,160};
System.out.println(Arrays.toString(a));//打印数组的内容,此处toString()方法为Arrays的静态方法,与Object类的toString()方法不同
Arrays.sort(a);//Arrays类的排序方法
System.out.println(Arrays.toString(a));
Arrays.fill(a, 1, 3, 115);//Arrays类的填充方法,填充位置为(1,3-1)
System.out.println(Arrays.toString(a));
//测试二分法查找
int[] b={123,221,156,143,178,226};
Arrays.sort(b);//使用二分法查找前必须先对数组进行排序
System.out.println(Arrays.binarySearch(b, 156));//查找115,返回115的索引位置
}
}
多维数组
多维数组的声明
public class Array_Tow {
public static void main(String args[]){
//二维数组的声明,Java中多维数组的声明应该从低维到高维的顺序进行
int[][] a=new int[3][];//先声明一维部分
a[0]=new int[2]; //声明二维部分,int类型默认初始化为0
a[1]=new int[3];
a[2]=new int[4];
for(int i=0;i<3;i++){
System.out.println(Arrays.toString(a[i]));//遍历数组a[][]
}
}
}
内存分析图
多维数组的静态初始化
//多维数组的静态初始化
int[][] b={{1,2,3},{4,5},{6,7,8,9}};
for(int i=0;i<b.length;i++){
System.out.println(Arrays.toString(b[i]));//遍历数组b[][]
多维数组的动态初始化
//多维数组的动态初始化
int[][] c=new int[3][];//int[][] c=new int[][3]为非法声明
c[0]=new int[]{1,2,3};
c[1]=new int[]{4,5};
c[2]=new int[]{6,7,8,9};
for(int i=0;i<c.length;i++){
System.out.println(Arrays.toString(c[i]));//遍历数组c[][]