1

我是 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 对象。如果有人可以帮助我解决这个问题,我将不胜感激。

4

2 回答 2

2

Java 中的数组列表既有大小又有容量

  • 大小告诉您列表中有多少项目,而
  • 容量告诉您列表在需要调整大小之前可以容纳多少项目。

当您调用ArrayList(int)构造函数时,您设置的是新创建的数组列表的容量,而不是大小。这就是为什么您在获得尺寸时会看到零打印出来的原因。

容量为 4 意味着您可以在不触发调整大小的情况下向列表中添加四个整数,但在您开始向其中添加一些数据之前,列表中的元素为零。

于 2013-10-21T19:04:47.753 回答
1

您使用了ArrayList确定其初始容量的构造函数,而不是其初始大小。该列表的容量为 4,但尚未添加任何内容,因此其大小仍为 0。

引用链接的 Javadocs:

构造一个具有指定初始容量的空列表。

另外,不要set用于添加到列表中。该方法替换了已经存在的元素。您必须add先到列表(或使用其他重载add方法)。

于 2013-10-21T19:03:33.413 回答