Java多维数组

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]
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bestkain233

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值