初始化类对象

时间:2013-10-21 19:01:53

标签: java class constructor initialization

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

2 个答案:

答案 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方法)。