是否有可能指向阵列中的多个阵列?

时间:2011-07-06 16:19:27

标签: java arrays pointers multidimensional-array

对于我正在做的项目,我希望能够创建一个多维数组,如下所示:

private static String[][] docArray = new String[6][];

对于那个数组,我建立了类似的东西:

docArray[0].equals(headingValue);
.
.
.
docArray[5].equals(anotherValue);

然后说我想做一些像索引3指向子数组的东西,逻辑上我认为你会做类似下面的事情(虽然我知道这不是正确的语法)......

docArray[3][1] = new String[6][];

到目前为止,我的逻辑是否正确,如何继续添加指向新数组的指针?提前感谢您的帮助。

4 个答案:

答案 0 :(得分:4)

问题是如果docArrayString[][],那么docArray[3][1]应该是String,而不是String[][]

这样可以让你做你想做的事情,因为每个docArray都是Object[][]而且锯齿状的String数组也是 Object

答案 1 :(得分:1)

因为docArray[3]也是一个数组,你可以做....

docArray[3] = new string[4]; //4 for example

如果内存正确,则称为锯齿状数组。

答案 2 :(得分:1)

我认为您正在寻找的是以下语法:

String[][] s2d = new String[3][]; // creates a 2-Dimensional Array with 3 rows (or columns, depending on how you index/address
s2d[0] = new String[4] // creates a new 1-Dimensional Array with 4 columns (at row 0)
s2d[1] = new String[26] // creates a new 1-Dimensional Array with 26 columns (at row 1)
s2d[0][0] = "This is a cell at row 0, column 0"

答案 3 :(得分:1)

我认为这里的关键概念是,无论你如何声明它,在Java中,任何东西的数组都只是一个普通的对象,定义为给定类型的一系列元素,因此对象数组可以包含其他阵列。

JVM中不支持以多种方式处理多维数组。所以只有两种类型的数组:

F []数组,其中F是基本类型(int,float等) O []数组,其中O是任何其他类型 - 包括数组(O = F [],或O = O'[])

所以,对于你的问题,你可以制作阵列数组,什么都不会阻止你。只是意识到你只是访问一维对象引用数组。

语法((array [i] [j])[m] [n])与(((((array [a])[b]))[c])[d])<没有区别/ p>

通过阅读您的问题和之前的答案,我会提供以下建议:保持尽可能强的类型,因为您只能在深入研究多维数组时丢弃输入信息,您永远不能添加它。在一个简单的表单中,您可以使用多种简单类型来表示您的文档:

class Line extends ArrayList<String> {}

class Paragraph extends ArrayList<String> { public Line[] getLines(); } 
class TextParagraph extends Paragraph {}
class QuotedParagraph extends Paragraph {} 
class HeadingParagraph extends Paragraph {}

class Document { public static void main (String[] args) { 
  Paragraph[] multiDiDoc = new Paragraph[10]; 
  multiDiDoc[0] = new HeadingParagraph();
} }

使用对象模型,您可以保留通用性('HeadingParagraph','QuotedParagraph','TextParagraph'类型)和支持特异性(不允许使用Object类型的任意对象)。

如果您坚持使用原始对象,随着您的客户端应用程序变得越来越大,您将越来越多地想知道您是否会遇到类强制转换异常。