1.二维数组:二维数组就是存储一维数组(内存地址/引用)的数组
2.二维数组的初始化
1) int intA[][]={{1,2},{2,3},{3,4,5}};
2) int [][] intB=new int[3][5];
3) int []intC []=new int[3][];
intC[0]=new int[2];
intC[1]=new int[3];
intC[2]=new int[5];
1 public class TestArray2 { 2 public static void main(String[] args) { 3 //二维数组不是规则的矩阵 4 int [] intA[] ={{1,2},{2,3,4},{3,4,5,6}}; 5 System.out.println(intA);//[[I@5e265ba4 两个[[表示是二维的 I表示数组是int型 @5e265ba4是内存地址 6 7 //声明一一个二维数组,用于存储3个一维数组,每一个一维数据存多少个数组,不知道 ,null 8 int [][]intB=new int[3][]; 9 intB[0]=new int[3]; //3 10 intB[1]=new int[]{1,2,3,4}; //3 11 intB[2]=new int[2]; //2 12 System.out.println(intB[1]);//[I@156643d4 13 System.out.println(intB[1][1]);//2 14 15 //声明一个二维数组,同时创建出一维数组,每个一维数组的长度均相同 16 //存储三个一维数组,每个一维数组的长度为4 17 int []intC[]=new int[3][4]; 18 System.out.println(intC); 19 20 } 21 }
3.二维数组的遍历
1) 普通 for 循环
2) 加强 for 循环
3) 普通 for 循环+加强 for 循环
public class TestArray3 { public static void main(String[] args) { //二维数组 int [] intA[] ={{1,2},{2,3,4},{3,4,5,6}}; //(1)普通for循环 for(int i=0;i<intA.length;i++){ //0,1,2 for(int j=0;j<intA[i].length;j++){ //每一个一维数组的长度 System.out.print(intA[i][j]+" "); } System.out.println(); } //(2)加强for循环 System.out.println(" ========================="); for(int[] arr:intA){ //int[]二维数组中元素的类型, arr迭代变量, intA二维组的名称 for(int i:arr){ //int,一维数组中元素的类型,i,迭代变量,arr,一维数组的名称 System.out.print(i+" "); } System.out.println(); } //(3)普通与加强for循环的混搭 System.out.println(" -------------------------"); for(int [] arr:intA){//加强for for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); } System.out.println(); } System.out.println(" --------------------------"); for(int i=0;i<intA.length;i++){ for(int j:intA[i]){//加强for System.out.print(j+" "); } System.out.println(); } } }
4.对象数组存储表格数据
张三 19 男
李四 20 女
王五 28 男
数组存基本数据类型,也可以存引用数据类型
对象数组:使用数组存储对象(自定义对象)
public class Person { private String name;//姓名 private int age;//年龄 private String gender;//性别 //重写toString以打印想要的输出 否则只会打印对象的内存地址 @Override public String toString() { // TODO Auto-generated method stub return name+" "+age+" "+gender;// } public Person(String name, int age, String gender) { super(); this.name = name; this.age = age; this.gender = gender; } public Person() { super(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; }
1 public class TestArray { 2 public static void main(String[] args) { 3 //创建一个Person类型的数组,用于存储3个Person类型的对象 4 Person [] pers=new Person[3]; 5 //创建Person类型的对象 6 Person p1=new Person("张三", 19, "男"); 7 //将p1对象存储到Person类型的数组中 8 pers[0]=p1; 9 10 pers[1]=new Person("李四", 20, "女"); 11 pers[2]=new Person("王五",28,"男"); 12 13 for(int i=0;i<pers.length;i++){ 14 System.out.println(pers[i]); 15 } 16 //对象数组中存储的是对象的引用(内存地址) 17 } 18 }
5.数组拷贝
地址的拷贝
int[]array={11,22,33,44};
int[] arrayB=new int[5];
arrayB=array //两个数组指向同一内存
值的拷贝
int[]array={11,22,33,44};
int[] arrayB=new int[5];
arrayB[0]=array[0];
System 类中的 arraycopy(…)方法:快速,数组大时用次方法。
1 public class TestArrayCopy3 { 2 public static void main(String[] args) { 3 int [] arrA={11,22,33,44};//源数组 4 int [] arrB=new int[5];//目标数组 5 6 System.out.println("数组拷贝之前"); 7 for(int num:arrB){ 8 System.out.print(num+" "); 9 } 10 //0 0 0 0 0 11 //拷贝 12 System.arraycopy(arrA, 0, arrB, 1, 2); 13 14 System.out.println(" 数组拷贝之后"); 15 for(int num:arrB){ 16 System.out.print(num+" "); 17 } 18 //0 11 22 0 0 19 } 20 }