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();
} }