如何在 java 中声明 Genric ArrayLists (2d Arraylists) 的 ArrayList?
How to declare an ArrayList of Genric ArrayLists (2d Arraylists) in java?
所以我一直在尝试创建一个ArrayList of ArrayList of Generics。基本上我有一个名为 Color 的通用 class(它在 运行 时间接收 Integer/Long/short 值)。现在我想创建一个类型为“Color”的二维数组列表,让我们说一个名为 Picture 的 class。我有构造函数和 arrayList 的声明。但我不明白的是,为什么 ArrayList 的大小最终为 0,即使我声明大小大于 0。代码后有更多内容...
import java.util.ArrayList;
public class Picture{
private ArrayList<ArrayList<Color<?>>> pic;
//constructor that takes in height and width of 2d array, and a Color parameter that will be populated in the 2d list
public Picture(int height, int width, Color color){
if((height <= 0) || (width<=0)){
throw new IndexOutOfBoundsException("invalid height and/or width");
}
else{
pic = new ArrayList<ArrayList<Color<?>>>(height);
System.out.println("size of given array: "+ pic.size()); //for error handling purposes
for(int r =0; r< pic.size(); r++ ){
pic.set(r, new ArrayList<Color<?>>(width));
for(int c = 0; c< width; c++){
pic.get(r).set(c, color);
}
}
}
}
}
每次我 运行 代码通过创建一个新的 Picture 对象来测试它 Picture pic1 =new Picture(3,4, new Color<Integer>(2));
或者任何大于 0 的值作为高度和宽度;我总是最终得到“给定数组的大小:0”(来自 System.out.println()
语句)并且 for 循环甚至没有发生,因为列表的大小最终为 0。最后整个人口应该在 2d ArrayList 中出现的颜色对象根本没有出现,'2d ArrayList - pic' 最终什么都不包含。
我不明白我哪里出错了,以及 2d ArrayList 被分配大小为 0 的位置,即使我用 'height' 分配一个保证大于零的值( if 语句的原因)。我假设我 declared/initialized 2d Arraylist - pic
错了。有人可以帮帮我吗?也请随时指出我的代码中的任何其他错误。
谢谢
你误解了ArrayList/那个构造器。
ArrayList 有 两个 属性,它们是 size-like:
容量
这个数字几乎从不有趣,意义不大。这是一个实现细节:一个容量为 10 的数组将允许您在不进行内部数组大小调整的情况下向其添加最多 10 个元素(什么是内部数组大小调整?内部实现细节。我告诉过你这基本上是无关紧要的)。如果您尝试添加第 11 个,效果很好,并且作为其中的一部分,容量会自动增加一点(如果有内存,可能会增加到 15 个)。在内部,ArrayList 有一个包含数据的数组(因此得名),如果您尝试将一个项目添加到容量已满的数组列表,则会在内部创建一个新的更大的数组,将旧数组复制到新数组,然后新数组取代数据存储,旧数组被丢弃。这就是容量。
有非常 几种方法甚至可以注意到,而且您很少需要关心。
尺寸
这是指列表中条目的实际数量。它必须是 capacity
或更小。
new ArrayList<Whatever>(10)
生成容量为 10 且大小为 0 的数组列表。您不能(轻松地)生成其中包含 X 个空指针的数组列表,而且您通常也不想这样做。例如,在这种简单的情况下,您需要做的就是 [A] 将 r<pic.size()
arg 替换为 r<height
,然后 [B] 将 .set
替换为 .add
。
所以我一直在尝试创建一个ArrayList of ArrayList of Generics。基本上我有一个名为 Color 的通用 class(它在 运行 时间接收 Integer/Long/short 值)。现在我想创建一个类型为“Color”的二维数组列表,让我们说一个名为 Picture 的 class。我有构造函数和 arrayList 的声明。但我不明白的是,为什么 ArrayList 的大小最终为 0,即使我声明大小大于 0。代码后有更多内容...
import java.util.ArrayList;
public class Picture{
private ArrayList<ArrayList<Color<?>>> pic;
//constructor that takes in height and width of 2d array, and a Color parameter that will be populated in the 2d list
public Picture(int height, int width, Color color){
if((height <= 0) || (width<=0)){
throw new IndexOutOfBoundsException("invalid height and/or width");
}
else{
pic = new ArrayList<ArrayList<Color<?>>>(height);
System.out.println("size of given array: "+ pic.size()); //for error handling purposes
for(int r =0; r< pic.size(); r++ ){
pic.set(r, new ArrayList<Color<?>>(width));
for(int c = 0; c< width; c++){
pic.get(r).set(c, color);
}
}
}
}
}
每次我 运行 代码通过创建一个新的 Picture 对象来测试它 Picture pic1 =new Picture(3,4, new Color<Integer>(2));
或者任何大于 0 的值作为高度和宽度;我总是最终得到“给定数组的大小:0”(来自 System.out.println()
语句)并且 for 循环甚至没有发生,因为列表的大小最终为 0。最后整个人口应该在 2d ArrayList 中出现的颜色对象根本没有出现,'2d ArrayList - pic' 最终什么都不包含。
我不明白我哪里出错了,以及 2d ArrayList 被分配大小为 0 的位置,即使我用 'height' 分配一个保证大于零的值( if 语句的原因)。我假设我 declared/initialized 2d Arraylist - pic
错了。有人可以帮帮我吗?也请随时指出我的代码中的任何其他错误。
谢谢
你误解了ArrayList/那个构造器。
ArrayList 有 两个 属性,它们是 size-like:
容量
这个数字几乎从不有趣,意义不大。这是一个实现细节:一个容量为 10 的数组将允许您在不进行内部数组大小调整的情况下向其添加最多 10 个元素(什么是内部数组大小调整?内部实现细节。我告诉过你这基本上是无关紧要的)。如果您尝试添加第 11 个,效果很好,并且作为其中的一部分,容量会自动增加一点(如果有内存,可能会增加到 15 个)。在内部,ArrayList 有一个包含数据的数组(因此得名),如果您尝试将一个项目添加到容量已满的数组列表,则会在内部创建一个新的更大的数组,将旧数组复制到新数组,然后新数组取代数据存储,旧数组被丢弃。这就是容量。
有非常 几种方法甚至可以注意到,而且您很少需要关心。
尺寸
这是指列表中条目的实际数量。它必须是 capacity
或更小。
new ArrayList<Whatever>(10)
生成容量为 10 且大小为 0 的数组列表。您不能(轻松地)生成其中包含 X 个空指针的数组列表,而且您通常也不想这样做。例如,在这种简单的情况下,您需要做的就是 [A] 将 r<pic.size()
arg 替换为 r<height
,然后 [B] 将 .set
替换为 .add
。