当前位置: 首页 > 图文教程 > Java技术 > Java基础 > Java基础:小编谈java多维数组

Java基础
Java串行端口技术协议
Java 1.5中面向方面(AOP)编程
实现基于Aspectwerkz的AOP开发
EJB 3.0开发指南之消息驱动Bean
Java堆的管理--垃圾回收
EJB 3.0开发指南之依赖注入
EJB3.0开发指南之有状态会话Bean
EJB3.0开发指南之无状态会话Bean
基于Java的企业分布式应用
J2SE5.0新特性之ProcessBuilder
J2SE5.0新特性之使用代理服务器
Java数据对象技术JDO
Java中ThreadLocal的设计与使用
Hibernate下数据批量处理
Java程序设计中的接口应用
Java中利用JMF编写摄像头拍照程序
性能、规模、风险 初评hibernate
Struts+Hibernate中解决汉字编码
Spring Framework标记库初学指南
基于Java的IDEA加密算法

Java基础:小编谈java多维数组


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 91 ::
收藏到网摘: n/a

今天和大家探讨多维数组,本文章主要是以举例子的形式和大家讲述多维数组。

Java里可以方便地创建多维数组:

//: MultiDimArray.java

// Creating multidimensional arrays.

import java.util.*;

 

public class MultiDimArray {

  static Random rand = new Random();

  static int pRand(int mod) {

    return Math.abs(rand.nextInt()) % mod + 1;

  }

  public static void main(String[] args) {

    int[][] a1 = {

      { 1, 2, 3, },

      { 4, 5, 6, },

    };

    for(int i = 0; i < a1.length; i++)

      for(int j = 0; j < a1[i].length; j++)

        prt("a1[" + i + "][" + j +

            "] = " + a1[i][j]);

    // 3-D array with fixed length:

    int[][][] a2 = new int[2][2][4];

    for(int i = 0; i < a2.length; i++)

      for(int j = 0; j < a2[i].length; j++)

        for(int k = 0; k < a2[i][j].length;

            k++)

          prt("a2[" + i + "][" +

              j + "][" + k +

              "] = " + a2[i][j][k]);

    // 3-D array with varied-length vectors:

    int[][][] a3 = new int[pRand(7)][][];

    for(int i = 0; i < a3.length; i++) {

      a3[i] = new int[pRand(5)][];

      for(int j = 0; j < a3[i].length; j++)

        a3[i][j] = new int[pRand(5)];

    }

    for(int i = 0; i < a3.length; i++)

      for(int j = 0; j < a3[i].length; j++)

        for(int k = 0; k < a3[i][j].length;

            k++)

          prt("a3[" + i + "][" +

              j + "][" + k +

              "] = " + a3[i][j][k]);

    // Array of non-primitive objects:

    Integer[][] a4 = {

      { new Integer(1), new Integer(2)},

      { new Integer(3), new Integer(4)},

      { new Integer(5), new Integer(6)},

    };

    for(int i = 0; i < a4.length; i++)

      for(int j = 0; j < a4[i].length; j++)

        prt("a4[" + i + "][" + j +

            "] = " + a4[i][j]);

    Integer[][] a5;

    a5 = new Integer[3][];

    for(int i = 0; i < a5.length; i++) {

      a5[i] = new Integer[3];

      for(int j = 0; j < a5[i].length; j++)

        a5[i][j] = new Integer(i*j);

    }

    for(int i = 0; i < a5.length; i++)

      for(int j = 0; j < a5[i].length; j++)

        prt("a5[" + i + "][" + j +

            "] = " + a5[i][j]);

  }

  static void prt(String s) {

    System.out.println(s);

  }

} ///:~

 

用于打印的代码里使用了length,所以它不必依赖固定的数组大小。

第一个例子展示了基本数据类型的一个多维数组。我们可用花括号定出数组内每个矢量的边界:

 

int[][] a1 = {

{ 1, 2, 3, },

{ 4, 5, 6, },

};

 

每个方括号对都将我们移至数组的下一级。

第二个例子展示了用new分配的一个三维数组。在这里,整个数组都是立即分配的:

int[][][] a2 = new int[2][2][4];

但第三个例子却向大家揭示出构成矩阵的每个矢量都可以有任意的长度:

 

 

    int[][][] a3 = new int[pRand(7)][][];

    for(int i = 0; i < a3.length; i++) {

      a3[i] = new int[pRand(5)][];

      for(int j = 0; j < a3[i].length; j++)

        a3[i][j] = new int[pRand(5)];

    }

 

对于第一个new创建的数组,它的第一个元素的长度是随机的,其他元素的长度则没有定义。for循环内的第二个new则会填写元素,但保持第三个索引的未定状态——直到碰到第三个new

根据输出结果,大家可以看到:假若没有明确指定初始化值,数组值就会自动初始化成零。

可用类似的表式处理非基本类型对象的数组。这从第四个例子可以看出,它向我们演示了用花括号收集多个new表达式的能力:

 

 

    Integer[][] a4 = {

      { new Integer(1), new Integer(2)},

      { new Integer(3), new Integer(4)},

      { new Integer(5), new Integer(6)},

    };

 

第五个例子展示了如何逐渐构建非基本类型的对象数组:

 

    Integer[][] a5;

    a5 = new Integer[3][];

    for(int i = 0; i < a5.length; i++) {

      a5[i] = new Integer[3];

      for(int j = 0; j < a5[i].length; j++)

        a5[i][j] = new Integer(i*j);

    }

 

i*j只是在Integer里置了一个有趣的值。