返回列表 发新帖

【Android入坑系列教程】33.数组(二)---Java基础

[复制链接]

62

主题

722

回帖

2756

积分

大学生

Rank: 5Rank: 5

金币
2029
好评
12
信誉
100

考神

发表于 2019-3-23 12:51:47 | 显示全部楼层 | 阅读模式  来自 四川
本帖最后由 pansong291 于 2019-3-24 13:00 编辑

上篇:32.数组(一)---Java基础
下篇:34.面向对象的概念---面向对象

注意:如果你的回复只是“感谢分享”、“辛苦了”之类的与教程内容无关的字眼,还请不要回复本帖,谢谢合作!!!
注意:如果你的回复只是“感谢分享”、“辛苦了”之类的与教程内容无关的字眼,还请不要回复本帖,谢谢合作!!!
注意:如果你的回复只是“感谢分享”、“辛苦了”之类的与教程内容无关的字眼,还请不要回复本帖,谢谢合作!!!


多维数组
在 Java 中并没有真正的多维数组,只有数组的数组,虽然在应用上很象 C 语言中的多维
数组,但还是有区别的。在 C 语言中定义一个二维数组,必须是一个 x*y 二维矩阵块,类似
我们通常所见到的棋盘,如下图所示:

Java 中多维数组不一定是规则矩阵形式,如下图所示:

我们这样定义一个多维数组:
int xx[][];
表示定义了一个数组引用变量 xx,第一个元素变量为 xx[0],第 n 个元素变量为 xx[n-1]
xx 中的每个元素变量(xx[0] 到 xx[n-1] )正好又是一个整数类型的数组引用变量,注意,这
里只是要求每个元素都是一个数组引用变量,并没有要求它们所引用数组的长度是多少,也
就是每个引用数组的长度可以不一样,我们还是看看下面的程序代码。
int[][] xx;
xx=new int[3][];
这两句代码表示数组 xx 有三个元素,每个元素都是 int []类型的一维数组。相当于定义
了三个数组引用变量,分别为 int xx[0][], int [] xx[1], int [] xx[2] 。你完全可以把 xx[0]
想成是一个普通的变量名,只是正好是 x、x、[0] 这五个字母的组合罢了,另外,作者是
故意对 int xx[0][], int [] xx[1] 这两个数组引用变量用不一样的方式书写,如果你还记得
前面讲过的一维数组的几种表示方式,就知道作者想达到一箭双雕的目的,既帮助读者巩固
了前面所学的知识,又便于读者通过对比而真正理解作者“把 xx[1] 想成是一个普通的变量名”
的思想。
由于 xx[0], xx[1], xx[2] 都是数组引用变量,必须对它们赋值,指向真正的数组对象,才
可以引用这些数组中的元素。
xx[0] =new int[3];
xx[1] =new int[2];
注意,xx[0] 和 xx[1] 的长度可以不一样,数组对象中也可以只有一个元素。程序运行到
这之后的内存分配情况如下图所示:

xx[0] 中的第二个元素用 xx[0][1] 来表示,如果我们要将整数 5 赋值给 xx[0] 中的第二个
元素,写法如下:
xx[0][1] = 5;
如果数组对象正好是一个 x*y 形式的规则矩阵,我们不必向上面的程序一样,先产生高
维的数组对象后,再逐一产生低维的数组对象,完全可以用一句代码在产生高维数组对象的
同时,产生所有的低维数组对象。
int xx[][]=new int[2][3];
上面的代码产生了一个 2*3 形式的二维数组,其内存布局如下图:

我们也可以象一维数组一样,在定义数组的同时就为多维数组元素分配空间并赋值,也
就是对多维数组的静态初始化。如下面这句代码
int[][] xx={{3,2,7},{1,5},{6}};
定义了一个如下图中的多维数组:

与一维数组一样,在声明多维数组时不能指定其长度,例如下面的定义将是非法的。
int xx[3][2] = {{3,2},{1,3},{7,5}}; //编译出错

一些与数组操作相关的函数
既然学到数组,我们就介绍两个与数组操作相关的函数:
1. 使用 System.arraycopy()函数拷贝数组。方法如下:
System.arraycopy(source, 0, dest, 0, x);
这行代码的意思就是:复制源数组中从下标 0 开始的 x 个元素到目的数组,从目标数组
的下标 0 所对应的位置开始存储。
程序清单:TestArrayCopy.java
public class TestArrayCopy
{
    public static void main(String [] args)
    {
        int ia[]=new int[]{1,2,3,4,5};
        int ib[]=new int[]{9,8,7,6,5,4,3};
        System.arraycopy(ia,0,ib,0,3);
        // 复制源数组中从下标 0 开始的 3 个元素到目的数组,从下标 0 的位置开始存储。
        for(int i=0;i<ia.length;i++)
            System.out.print(ia[i]);
        System.out.println();
        for(int j=0;j<ib.length;j++)
            System.out.print(ib[j]);
        System.out.println();
    }
}
注意:你复制的数组元素的个数一定不要超过目的数组的长度。否则会有异常产生。
2. 用 Arrays.sort() 来排序数组,把里面的元素按从小到大的顺序逐一排列,然后把排序后
的数组输出在命令行窗口上:
程序清单:ArrSort.java
import java.util.*;
//关于上面这条语句的细节,读者暂且不用理会,在后面的章节中会有详细的讲解。
public class ArrSort
{
    public static void main(String [] args)
    {
        int ia[]=new int[]{1,2,4,8,3};
        Arrays.sort(ia); //对数组 ia 进行排序
        for(int i=0;i<ia.length;i++)
            System.out.print(ia[i]);//输出数组 ia
    }
}
程序运行结果是:
12348

上篇:32.数组(一)---Java基础
下篇:34.面向对象的概念---面向对象

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表