1

私はJavaが初めてです。簡単なことを聞​​いてすみません。以下のコードを書いたのですが、うまく初期化されていないようです。list1のサイズを印刷すると、サイズ= 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 なのはなぜですか? Func1 に 4 を渡すと、サイズ n の MyClass オブジェクトが作成されるため、4 にする必要があります。誰かがこの問題について私を助けることができれば、私は感謝します.

4

2 に答える 2

2

Java の配列リストには、サイズ容量の両方があります。

  • サイズは、リスト内にいくつのアイテムがあるかを示します。
  • 容量は、サイズ変更が必要になる前にリストが保持できるアイテムの数を示します。

コンストラクターを呼び出すときArrayList(int)は、新しく作成された配列リストのサイズではなく、容量を設定します。そのため、サイズを取得するとゼロが出力されます。

容量が 4 であることは、サイズ変更をトリガーせずに 4 つの整数をリストに追加できることを意味しますが、データを追加し始めるまで、リストには要素がありません。

于 2013-10-21T19:04:47.753 に答える
1

初期サイズではなく、ArrayList初期容量を決定するコンストラクターを使用しました。リストの容量は 4 ですが、まだ何も追加されていないため、サイズは 0 のままです。

リンクされた Javadoc からの引用:

指定された初期容量で空のリストを構築します。

setまた、リストへの追加には使用しないでください。そのメソッドは、すでに存在する要素を置き換えますadd最初にリストに移動する必要があります (または他のオーバーロードされたadd方法を使用します)。

于 2013-10-21T19:03:33.413 に答える