我是Java新手。如果我问一个简单的事情,我道歉。 我写了下面的代码,但它似乎没有正确初始化。因为当我打印list1的大小时,它显示size = 0 !!但是,它应该是4!
public static class MyClass{
public List <Integer> list1
// Class Constructor
public MyClass(int n){
list1 = new ArrayList <Integer> (n);
System.out.println("Size = " + list1.size() );
// prints Size = 0 !!!why???
}
public void init(int n){
for(int cnt1 = 0; cnt1 < list1.size(); cnt1++){
list1.set(cnt1 , cnt1);
}
}
...}
public static List<Integer> Func1(int n){
MyClass = new myclass (n);
myclass.init(n);
... }
public static void main(String args[]){
int n = 4;
result = Func1 (n);
...}
为什么list1的大小为0?它应该是4,因为我将4传递给Func1,然后它创建大小为n的MyClass对象。 如果有人可以帮我解决这个问题,我将感激不尽。
答案 0 :(得分:2)
Java中的数组列表具有大小和容量。
当您调用ArrayList(int)
构造函数时,您可以设置新创建的数组列表的容量,而不是大小。这就是为什么当你得到尺寸时看到零打印出来的原因。
容量为4意味着您可以在不触发调整大小的情况下向列表中添加四个整数,但在您开始向其中添加一些数据之前,该列表只有零元素。
答案 1 :(得分:1)
您使用的是ArrayList
constructor that determines its initial capacity,而不是其初始尺寸。该列表的容量为4,但尚未添加任何内容,因此其大小仍为0。
从链接的Javadocs引用:
构造一个具有指定初始容量的空列表。
另外,请勿使用set
添加到列表中。那种方法replaces an element that is already there。您必须先add
到列表中(或使用其他重载的add
方法)。