1

私は新しくJavaを学んでいます.utilパッケージのさまざまなデータ構造を理解しようとしています.

/*create an ArrayList object*/
List<String> arrayList = new ArrayList<String>();

私が見たArrayListクラスの宣言で

public class ArrayList
extends AbstractList
implements List, RandomAccess, Cloneable, Serializable

私の質問は、タイプ List<> のオブジェクトを使用して、ArrayList<> のコンストラクターによって返されるオブジェクトを格納するかどうかです。

add() や size() など、List インターフェイスで指定されたメソッドのみを使用する必要があると思われるかもしれません。

自分のマシンでこれを試しましたが、うまくいきません。以下の Java チュートリアルで見つけました。

http://www.javamex.com/tutorials/collections/using_1.shtml

私が試した完全なサンプルコードは次のとおりです。

package arraylist;
import java.util.ArrayList;
import java.util.List;

public class ArrayListExample {

        public static void main(String[] args)
        {

        /*create an ArrayList object*/
         List<String> arrayList = new ArrayList<String>();

                /*
                Add elements to Arraylist using
                boolean add(Object o) method. It returns true as a general behavior
                of Collection.add method. The specified object is appended at the end
                of the ArrayList.
                 */
        arrayList.add("1");
        arrayList.add("2");
        arrayList.add("3");

        /*
        Use get method of Java ArrayList class to display elements of ArrayList.
        Object get(int index) returns and element at the specified index in
        the ArrayList
         */
        System.out.println("Getting elements of ArrayList");
        System.out.println(arrayList.get(0));
        System.out.println(arrayList.get(1));
        System.out.println(arrayList.get(2));
    }
}

List. をインポートするのを忘れていたので、機能しませんでした。しかし、次の質問は、List 型の変数を使用して、ArrayList 型のオブジェクトに格納することです。

List と ArrayList のメソッドの比較 ArrayList には、list には存在しない trimToSize() というメソッドがあります。

上記の場合、そのメソッドを呼び出すことができますか?

はいの場合、派生クラスのメソッドリストは常に基本クラスメソッドのスーパーセットになるため、基本クラスポインターを使用して派生クラスオブジェクトを格納できることを一般的に意味しますか?

私の上記の結論は正しいですか?それは私のばかげた質問に聞こえますが、私はJavaに非常に慣れていません。

4

4 に答える 4

3

ArrayListはインターフェイスを実装しているため、 に初期化さListれた として宣言されたオブジェクトを使用できるはずです。これはかなり一般的な方法です。コードを変更せずにリストの実装を切り替えることができます。ListArrayList

リストインターフェースをインポートしていることを確認してください:

package arraylist;
import java.util.ArrayList;
import java.util.List;

public class ArrayListExample {

        public static void main(String[] args)
        {

        /*create an ArrayList object*/
         List<String> arrayList = new ArrayList<String>();

                /*
                Add elements to Arraylist using
                boolean add(Object o) method. It returns true as a general behavior
                of Collection.add method. The specified object is appended at the end
                of the ArrayList.
                 */
        arrayList.add("1");
        arrayList.add("2");
        arrayList.add("3");

        /*
        Use get method of Java ArrayList class to display elements of ArrayList.
        Object get(int index) returns and element at the specified index in
        the ArrayList
         */
        System.out.println("Getting elements of ArrayList");
        System.out.println(arrayList.get(0));
        System.out.println(arrayList.get(1));
        System.out.println(arrayList.get(2));
    }
}

を参照する場合、関数はインターフェイス上にないためList使用できません。trimToSizeList

于 2013-01-24T01:09:54.007 に答える
2

この例を考えてみましょう。

class A implements B {  }

この場合、クラスは、実装されたインターフェースの 1 つのタイプの変数に割り当てられます。

C c = new A();

c のインスタンスを使用するときにこのキャストを行うと、クラス C で使用可能なメソッドのみがアクセス可能になります。

同様ArrayListにあなたの ClassA はあなたのListクラス B です。

以下の usingarraylistインスタンスでは、List インターフェイスで利用可能なメソッドを呼び出すことができます。

/*create an ArrayList object*/
List<String> arrayList = new ArrayList<String>();

また、上記の割り当てを使用する場合、ArrayList メソッドtrimToSize()などを呼び出すことはできません。ArrayList メソッドを使用する場合は、以下のように使用してください。

/*create an ArrayList object*/
ArrayList<String> arrayList = new ArrayList<String>();

ほとんどの開発者は、時間の 90% で List が提供するメソッドを使用しており、それがすべての例が前者のメソッドに従っている理由です。

于 2013-01-24T01:15:51.473 に答える
1

List<String>List<String>arrayList は、「この変数はインターフェイスの実装のみを格納できる」ことを意味します

ArrayList<String>List<String>そこに住むことができるように実装します。

于 2013-01-24T01:09:18.200 に答える
1

ファイルの先頭を次のように編集します。

パッケージ配列リスト; import java.util.ArrayList; java.util.List をインポートします。

....

List をインポートしていない場合は、変数の型として使用できません。これはあなたが経験している問題です。

于 2013-01-24T01:19:44.343 に答える