2012-10-06 86 views
-1

有人可以解释我2个程序之间的区别,基本上是泛型和对象之间的区别。 也为什么 System.out.println(“将1添加到集合:”+ vs.add(new String(“Hello”))); 仅适用于第一个程序Java矢量集

第一个向量组计划

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()); 
} 
} 

第二个向量组计划

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()); 
} 
} 
+5

http://docs.oracle.com/javase/tutorial/java/generics/ – gtgaxiola

+1

你应该问你在两个例子之间有什么困难要理解,而不是问一个关于代码的很好的解释。 –

回答

1

当你创建一个VectorSet2,您可以指定它的元素类型。在第二个程序的情况下,该类型是Integer。一个字符串不是一个整数,所以你不能添加一个字符串到VectorSet2。

但是,VectorSet1可以具有任何类型的元素(任何可以视为Object的元素)。所以,如果你有一个VectorSet1,你可以添加任何对象,不管它是一个String,Integer还是任何其他类型的对象。