
public class Vector<T> {
	
	private Object[] data;
	private int s;
	
	public Vector(){
		data = new Object[1];
		s = 0;
	}
	
	public Vector(int initialCapacity)
	{
		data = new Object[initialCapacity];
		s = 0;
	}
	
	private void expand()
	{
		Object[] newdata = new Object[2*data.length];
		for (int i = 0; i < s; i ++)
		{
			newdata[i] = data[i];
		}
		data = newdata;
	}
	
	public void add(T item)
	{
		if (s == data.length)
		{
			expand();
		}
		
		data[s] = item;
		s ++;
		
	}
	
	public void add(T item, int index)
	{
		if (s == data.length)
			expand();
		
		for (int i = s; i > index; i--)
		{
			data[i] = data[i-1];
		}
		
		data[index] = item;
		s ++;
	}
	
	public T remove(int index)
	{
		if (index < 0 || index >= s) return null;
		
		T ret = (T) data[index];
		
		for(int i = index; i < s; i++)
		{
			data[i] = data[i + 1];
		}
		s--;
		return ret;	
	}
	
	public T get(int index)
	{
		if (index < 0 || index >= s) return null;
		
		return (T) data[index];
	}
	
	public int size()
	{
		return s;
	}
	
	public int capacity()
	{
		return data.length;
	}
	
	public String toString()
	{
		String ret = "<Vector[" + s + "]: ";
		for (int i = 0; i < s-1; i ++)
			ret += data[i] + ", ";
		ret += data[s-1] + " >";
		return ret;
	}
	
	public static void main(String[] args)
	{
		Vector<Integer> v = new Vector<Integer>(10);
		for (int i = 0; i < 100; i++)
			v.add(i);
		
		System.out.println(v);
		
		v.remove(10);
		System.out.println(v);
	}
	
	

}
