can someone explain me the difference between the 2 programs, basically the difference between generic and object.
also why
System.out.println(“adding 1 to the set: ” + vs.add(new String(“Hello”)));
works only for the first program
First Vector set program
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());
}
}
Second Vector set program
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());
}
}
When you create a VectorSet2, you specify a type for its elements. In the case of the second program, that type is Integer. A String is not an Integer, so you can’t add a String to a VectorSet2.
A VectorSet1, though, can have elements of any type (anything that can be treated as an Object). So if you have a VectorSet1, you can add any object to it, whether it’s a String, Integer, or any other kind of object.