Java多维数组
**多维数组可以看成以数组为元素的数组。**可以有二维、三维、甚至更多维数组,但是实际开发中用 的非常少。最多到二维数组(学习容器后,我们一般使用容器,二维数组用的都很少)。
【示例】二维数组的声明
public class Test {
public static void main(String[ ] args) {
// Java中多维数组的声明和初始化应按从低维到高维的顺序进行
int[ ][ ] a = new int[3][ ];
a[0] = new int[2];
a[1] = new int[4];
a[2] = new int[3];
// int a1[ ][ ]=new int[ ][4];//非法
}
}
【示例】二维数组的静态初始化
public class Test {
public static void main(String[ ] args) {
int[ ][ ] a = { { 1, 2, 3 }, { 3, 4 }, { 3, 5, 6, 7 } };
System.out.println(a[2][3]);
}
}
【示例】二维数组的动态初始化
import java.util.Arrays;
public class Test {
public static void main(String[ ] args) {
int[ ][ ] a = new int[3][ ];
//a[0] = {1,2,5}; //错误,没有声明类型就初始化
a[0] = new int[ ] { 1, 2 };
a[1] = new int[ ] { 2, 2 };
a[2] = new int[ ] { 2, 2, 3, 4 };
System.out.println(a[2][3]);
System.out.println(Arrays.toString(a[0]));
System.out.println(Arrays.toString(a[1]));
System.out.println(Arrays.toString(a[2]));
}
}
4
[1, 2]
[2, 2]
[2, 2, 3, 4]
数组存储表格数据
表格是计算机世界最普遍的模型。大家在互联网上看到的所有数据本质上都是“表格”。
ID | 姓名 | 年龄 | 职能 | 入职日期 |
---|---|---|---|---|
1001 | 小龙一 | 18 | 学生 | 09-01 |
1002 | 小龙二 | 19 | 学生 | 09-02 |
1003 | 小龙三 | 20 | 学生 | 09-03 |
我们观察表格,发现每一行可以使用一个一维数组存储:
Object[ ] a1 = {1001, “小龙一”, 18, “学生”, “09-01”};
Object[ ] a2 = {1002, “小龙二”, 19, “学生”, “09-02”};
Object[ ] a3 = {1003, “小龙三”, 20, “学生”, “09-03”};
注意:
此处基本数据类型”1001”,本质不是 Object 对象。JAVA 编译器会自动把基本数据 类型“自动装箱”成包装类对象。
【示例】使用二维数组保存表格数据
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
Object[] a1 = {1001, "小龙一", 18, "学生", "09-01"};
Object[] a2 = {1002, "小龙二", 19, "学生", "09-02"};
Object[] a3 = {1003, "小龙三", 20, "学生", "09-03"};
Object[][] emps = new Object[3][];
emps[0] = a1;
emps[1] = a2;
emps[2] = a3;
System.out.println(Arrays.toString(emps[0]));
System.out.println(Arrays.toString(emps[1]));
System.out.println(Arrays.toString(emps[2]));
}
}
[1001, 小龙一, 18, 学生, 9-01]
[1002, 小龙二, 19, 学生, 9-02]
[1003, 小龙三, 20, 学生, 9-03]
【示例】使用 javabean 和一维数组保存表格信息
package com.bestkain.array;
//使用javabean和数组保存表格数据
public class Test09 {
public static void main(String[] args) {
Emp[] emps = {
new Emp(1001, "仵洋一", 18, "学生", "9-17"),
new Emp(1002, "仵洋二", 19, "学生", "9-17"),
new Emp(1003, "仵洋三", 20, "学生", "9-17")};
for (Emp temp:emps) {
System.out.println(temp);
}
}
}
class Emp {
private int id;
private String name;
private int age;
private String job;
private String hiredate;
@Override
public String toString() {
return "Emp{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", job='" + job + '\'' +
", hiredate='" + hiredate + '\'' +
'}';
}
public Emp(int id, String name, int age, String job, String hiredate) {
this.id = id;
this.name = name;
this.age = age;
this.job = job;
this.hiredate = hiredate;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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 getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public String getHiredate() {
return hiredate;
}
public void setHiredate(String hiredate) {
this.hiredate = hiredate;
}
}
Emp{id=1001, name='仵洋一', age=18, job='学生', hiredate='9-17'}
Emp{id=1002, name='仵洋二', age=19, job='学生', hiredate='9-17'}
Emp{id=1003, name='仵洋三', age=20, job='学生', hiredate='9-17'}
Comparable 接口
多个对象做比较,就要有“比较规则”,然后实现排序。
事实上,java 中排序算法的底层也依赖 Comparable 接口。
Comparable 接口中只有一个方法: public int compareTo(Object obj) //obj为要比较的对象
方法中,将当前对象和 obj 这个对象进行比较,如果大于返回 1,等于返回 0,小于返回-1. (此 处的 1 也可以是正整数,-1 也可以是负整数)。
public int compareTo(Object o) {
Man man = (Man) o;
if (this.age < man.age) {
return -1;
}
if (this.age > man.age) {
return 1;
}
return 0;
}
【测试 Comparable 接口】使用 Arrays 类对数组元素进行排序
import java.util.Arrays;
//测试Comparable接口(定义比较策略)
public class Test {
public static void main(String[] args) {
Man1[] man1 = {
new Man1(3, "a"),
new Man1(60, "b"),
new Man1(2, "c")};
System.out.println(Arrays.toString(man1));//排序前
Arrays.sort(man1);
System.out.println(Arrays.toString(man1));//排序后
}
}
class Man1 implements Comparable {
int age;
int id;
String name;
public Man1(int age, String name) {
super();
this.age = age;
this.name = name;
}
@Override
public String toString() {
return this.name;
}
@Override
public int compareTo(Object o) {
Man1 man1 = (Man1) o;
if (this.age < man1.age) {
return -1;
}
if (this.age > man1.age) {
return 1;
}
return 0;
}
}
[a, b, c]
[c, a, b]