import java.util.*;


public class VectorEsim<E> extends Vector<E> {

	public static void main(String[] args) {

		int N = 10;
		if (args.length > 0)
			N = Integer.valueOf(args[0]);

		int M = N;
		if (args.length > 1)
			M = Integer.valueOf(args[1]);


		VectorEsim<Integer> x = new VectorEsim(N, 1, M, 42);

		System.out.println(x);

		x.print1();

		x.setSize(15);
		x.set(14, 14);
		x.print1();
		System.out.println(x);

		System.out.println(x.hasDuplicates());

		x.purge();

		System.out.println(x);

		System.out.println(x.hasDuplicates());

		System.out.println(x.delMax());

		System.out.println(x);

		VectorEsim<Integer> y = new VectorEsim(N, 1, M, 5);
		
		System.out.println(y);

		x.append(y);

		System.out.println(x);
		System.out.println(x.sum());


	} // main()

	
	// contsructor for creating a random content
	public VectorEsim(int count, Integer min, Integer max, int seed) {

		Random r = new Random(seed);
		Integer x = new Integer(0);
		for (int i = 0; i < count; i++) {
			x = r.nextInt(max-min+1) + min;
			super.addElement((E)x);
		}
	}

	// returns true if the vector has an element twice
	// using indexes
	public boolean hasDuplicates() {
		for (int i = 0; i < this.size(); i++)
			for (int j = i+1; j < this.size(); j++)
				if (get(i).equals(get(j)))
					return true;
		return false;

	}
	public void print1() {
		for (int i = 0; i < this.size(); i++) {
			System.out.print(this.get(i));
			System.out.print(" ");
		}
		System.out.println();
	}


	// removes duplicates
	// ugly using indexes
	public void purge() {
		for (int i = 0; i < this.size(); i++)
			for (int j = i+1; j < this.size(); j++)
				if (get(i).equals(get(j))) {
					remove(j);
					j--; // compensates removal
				}
	}

	public void append(Vector<E> v2) {
		for (E x : v2)
			add(x);
	}

	public int sum() {
		int s = 0;
		for (E x : this)
			s += (Integer)x;
		return s;
	}

	public E delMax() {
		int maxIndex = 0;
		if (this.size() == 0)
			return null;

		for (int i = 1; i < this.size(); i++)
				if ((((Comparable)(get(maxIndex))).compareTo(get(i))) < 0)
					maxIndex = i;

		return remove(maxIndex);
	}


} // class VectorEsim
			

