Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 2d数组还是2d数组列表?_Java_Arrays_Arraylist_Multidimensional Array - Fatal编程技术网

Java 2d数组还是2d数组列表?

Java 2d数组还是2d数组列表?,java,arrays,arraylist,multidimensional-array,Java,Arrays,Arraylist,Multidimensional Array,我的任务是制作一个与多值数据库接口的程序。我接收字符串中的整个记录,其中包含值和子值的delimeters。从那里我将数据分割成一个二维数组。下面是其中的一个片段(注意长度的变化): 现在我总是使用ArrayList而不是Arrays,因为我知道这是最佳实践。现在我想知道使用2d ArrayList是否也有好处。我看过一些例子,但我不太明白如何在需要时获得这些值。如果我要做: String[][] cheese = { {"chedder", "swiss", "pepperjack"}

我的任务是制作一个与多值数据库接口的程序。我接收字符串中的整个记录,其中包含值和子值的delimeters。从那里我将数据分割成一个二维数组。下面是其中的一个片段(注意长度的变化):

现在我总是使用ArrayList而不是Arrays,因为我知道这是最佳实践。现在我想知道使用2d ArrayList是否也有好处。我看过一些例子,但我不太明白如何在需要时获得这些值。如果我要做:

String[][] cheese = {
    {"chedder", "swiss", "pepperjack"},
    {"sliced", "cubed", "block"}
};
String myFavorite = cheese[0][2];

我最喜欢的是pepperjack,但是我如何使用2d ArrayList呢?我发现这个例子对我没有太大帮助。我确实知道我将要接收的数据的确切行数(而不是列数),而且行数不会改变,所以可能常规2d数组是最佳做法?

您可以通过使外部
ArrayList
的成员自己
ArrayList
来创建2d
ArrayList

List<List<String>> cheese = new ArrayList<List<String>>();
您可以通过两个连续的
get
调用来提取元素

String myFavorite = cheese.get(0).get(2);

可以像使用一维数组列表一样使用get函数。因此,如果您的ArrayList是cheese,则有其他ArrayList,您可以尝试以下内容:

String myFavorite = cheese.get(0).get(2);
String myFavorite = cheese.get(0).get(2);

第一个get将返回第一个ArrayList,第二个get将返回所述第一个ArrayList的第三项(第二个索引)。

您的数据看起来不属于2d数组或列表。如果是我,我会创建对数据有意义的数据结构。如果必须使用列表列表:

List<List<String>> cheese = new ArrayList<List<String>>();
cheese.add(Arrays.asList("cheddar", "swiss", "pepperjack"));
cheese.add(Arrays.asList("sliced", "cubed", "block"));

String myFavorite = cheese.get(0).get(2);
List cheese=newarraylist();
cheese.add(Arrays.asList(“cheddar”、“swiss”、“pepperjack”));
添加(Arrays.asList(“切片”、“立方”、“块”));
字符串myFavorite=cheese.get(0.get(2);

我没有示例,但您应该能够创建一个ArrayList of ArrayList并执行以下操作:

String myFavorite = cheese.get(0).get(2);
String myFavorite = cheese.get(0).get(2);

为什么数据看起来不属于2d数组/列表?我的第一个示例(我实际使用的数据)每行有多个数据。假设第5行是所述项目的制造商编号,我们根据价格从两个不同的制造商处获得该项目。在原始数据库中,它存储在同一行中,但有分隔符。我正在尝试打包数据以便在我的程序中方便使用,因此如果我想要第二个制造商的编号,我会说info[5][1],或者现在说info.get(5).get(1)。编辑:不想听起来像是防御,只是想知道是否有更好的解决方案!因此,如果该数据表示与项目相关的内容,则使用制造商编号列表的属性创建一个
item
类。然后,您可以执行
item.getManufacturerNumber(2)
item.getManufacturerNumber()[1]
或类似操作,而不是
info[5][1]
。这就清楚地表明了数据代表了什么。