-1

誰かが2つのプログラムの違い、基本的にジェネリックとオブジェクトの違いを説明できますか。なぜ System.out.println("adding 1 to the set: " + vs.add(new String("Hello"))); 最初のプログラムでのみ機能します

最初のベクトル セット プログラム

import java.util.Vector;

class VectorSet1 {
boolean add(Object obj) {
        if (contains(obj)) return false;
    v.add(obj);
    return true;
}

boolean contains(Object obj) {return v.contains(obj);}

public String toString() {return v.toString();}

void clear() {v.clear();}

int size() {return v.size();}

boolean isEmpty() {return v.isEmpty();}

Vector v = new Vector();

public static void main(String [] args) {
    VectorSet1 vs = new VectorSet1();

    System.out.println("set: " + vs);

    System.out.println("adding 1 to the set: " + vs.add(1));
    System.out.println("adding 5 to the set: " + vs.add(5));
    System.out.println("adding 17 to the set: " + vs.add(17));
    System.out.println("adding 1 to the set: " + vs.add(1));
    //System.out.println("adding 1 to the set: " + vs.add(new   String("Hello")));

    System.out.println("set: " + vs);

    System.out.println("testing if 1 s in the set: " + vs.contains(1));
    System.out.println("testing if 17 is in the set: " + vs.contains(17));
    System.out.println("testing if 6 is in the set: " + vs.contains(6));

    System.out.println("set is empty: " + vs.isEmpty());
    System.out.println("size of set: " + vs.size());


    vs.clear();

    System.out.println("after invoking clear");

    System.out.println("set: " + vs);

    System.out.println("set is empty: " + vs.isEmpty());
    System.out.println("size of set: " + vs.size());
}
}

2 番目のベクトル セット プログラム

import java.util.Vector;
import java.util.Iterator;

class VectorSet2<E> {
boolean add(E e) {
        if (contains(e)) return false;
    v.add(e);
    return true;
}

boolean contains(E e) {return v.contains(e);}

public String toString() {return v.toString();}

void clear() {v.clear();}

int size() {return v.size();}

boolean isEmpty() {return v.isEmpty();}

Vector<E> v = new Vector<E>();

public static void main(String [] args) {
    VectorSet2<Integer> vs = new VectorSet2<Integer>();

    System.out.println("set: " + vs);

    System.out.println("adding 1 to the set: " + vs.add(1));
    System.out.println("adding 5 to the set: " + vs.add(5));
    System.out.println("adding 17 to the set: " + vs.add(17));
    System.out.println("adding 1 to the set: " + vs.add(1));
    //System.out.println("adding Hello to the set: " + vs.add("Hello"));

    System.out.println("set: " + vs);

    System.out.println("testing if 1 s in the set: " + vs.contains(1));
    System.out.println("testing if 17 is in the set: " + vs.contains(17));
    System.out.println("testing if 6 is in the set: " + vs.contains(6));

    System.out.println("set is empty: " + vs.isEmpty());
    System.out.println("size of set: " + vs.size());


    vs.clear();

    System.out.println("after invoking clear");

    System.out.println("set: " + vs);

    System.out.println("set is empty: " + vs.isEmpty());
    System.out.println("size of set: " + vs.size());
}
}
4

1 に答える 1

1

VectorSet2 を作成するときは、その要素の型を指定します。2 番目のプログラムの場合、その型は Integer です。文字列は整数ではないため、文字列を VectorSet2 に追加することはできません。

ただし、VectorSet1 は任意の型の要素 (オブジェクトとして扱うことができるもの) を持つことができます。したがって、VectorSet1 がある場合は、文字列、整数、またはその他の種類のオブジェクトのいずれであっても、任意のオブジェクトを追加できます。

于 2012-10-06T18:42:03.773 に答える