Java 是否可以指向阵列中的多个阵列?

Java 是否可以指向阵列中的多个阵列?,java,arrays,pointers,multidimensional-array,Java,Arrays,Pointers,Multidimensional Array,因此,对于我正在做的一个项目,我希望能够创建一个多维数组,它看起来像: private static String[][] docArray = new String[6][]; 对于该阵列,我将建立如下内容: docArray[0].equals(headingValue); . . . docArray[5].equals(anotherValue); 然后假设我想做一些事情,比如让索引3指向一个子数组,从逻辑上说,我认为您应该做如下事情(尽管我知道这不是正确的语法) 到目前为止,我的逻

因此,对于我正在做的一个项目,我希望能够创建一个多维数组,它看起来像:

private static String[][] docArray = new String[6][];
对于该阵列,我将建立如下内容:

docArray[0].equals(headingValue);
.
.
.
docArray[5].equals(anotherValue);
然后假设我想做一些事情,比如让索引3指向一个子数组,从逻辑上说,我认为您应该做如下事情(尽管我知道这不是正确的语法)


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

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


您可以做的是将
docArray
作为
对象[][]
;这将允许您做您想做的事情,因为每个
字符串
都是一个
对象
,而锯齿状
字符串[][]
数组也是一个
对象

既然
docArray[3]
也是一个数组,您可以

docArray[3]=新字符串[4]//4例如


如果内存使用正确,则称之为锯齿数组。

我认为您要查找的是以下语法:

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"

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

JVM中不支持以任何方式处理多维数组。因此,只有两种类型的数组:

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

所以,对于你的问题,你可以制作数组,没有什么能阻止你。请注意,您只是在访问对象引用的一维数组

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

通过阅读您的问题和之前的答案,我将提供以下建议:尽可能保持强类型,因为您只能在深入研究多维数组时放弃键入信息,而不能将其添加到多维数组中。以简单的形式,您可以使用多种简单类型表示文档:

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();
} }
类行扩展了ArrayList{}
类段落扩展了ArrayList{public Line[]getLines();}
类text段落扩展段落{}
类Quoted段落扩展了段落{}
类标题段落扩展段落{}
类文档{publicstaticvoidmain(String[]args){
第[]款=新的第[10]款;
multiDiDoc[0]=新标题段落();
} }
使用对象模型,可以保留通用性(“HeadingParague”、“QuotedParague”、“TextParague”类型),并支持特定性(不允许对象类型的任意对象)


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

因此,我可以不调用任何数组类型字符串[][],而是将它们全部称为类型对象[]?这有什么缺点吗?@这是一个简单的语法:缺点是你可以把东西放在它们里面,而不是
字符串
对象。但是您可以编写自己的类来包装此结构并控制对它的访问如何访问该新数组以在其中存储另一个数组?@此语法:您必须执行:
Object[][]子数组=(Object[]])docArray[3][0]
然后您可以作为
对象[]【】
访问
子阵列
。Kk,我会尝试一下。非常感谢。但是如果我希望新数组也是多维数组(与以前的数组相同),这对我的目的有用吗?我不确定这正是我想要的,但我感谢您的输入。因此,如果我想走这条路线,请看这个答案。我会使用班级行、班级段落、班级标题段落,当然还有班级文档。这些类将代表数组中存储的元素。但是,在数组中,我希望存储指向兄弟节和子节的指针。那个么我该如何创建这样的类呢?我将从段落中提取getLines,并将其添加到TextParague,并使QuotedParague扩展TextParague。然后,您可以将段落用作可以包含同级节或子节的通用元素。我不确定兄弟部分背后的语义,但听起来您需要的是列表类型的数据结构,而不是数组数据结构。根据您的勇气和文档的大小,您可以查看跳过列表。类Para{public Para prev();public Para next();public List children();}Para docHead;
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();
} }