class Main {
public static void main(String[] args) {
Vector<String> v = new Vector<>();
v.pushBack("1");
v.pushBack("2");
v.pushBack("3");
v.pushBack("4");
v.pushBack("5");
v.pushBack("6");
v.pushBack("7");
v.pushBack("8");
v.pushBack("9");
v.pushBack("10");
System.out.println(v.toString());
System.out.println("size: " + v.size());
System.out.println("capacity: " + v.capacity());
for (int i = 0; i < v.size(); i++) {
System.out.println(v.get(i));
}
v.popBack();v.popBack();v.popBack();v.popBack();v.popBack();
v.popBack();v.popBack();v.popBack();v.popBack();
System.out.println("size: " + v.size());
System.out.println("capacity: " + v.capacity());
}
}
public class Vector<T> {
private int size = 0;
private int capacity = 2;
private T[] genericArray = (T[]) new Object[capacity];
public int size() {
return size;
}
public int capacity() {
return capacity;
}
public T get(int n) {
return genericArray[n];
}
public void pushBack(T data) {
if (size >= capacity) {
doubleCapacity();
}
genericArray[size] = data;
size++;
}
public void popBack() {
size--;
genericArray[size] = null;
if (size * 4 < capacity && capacity > 4) {
halveCapacity();
}
}
private void doubleCapacity() {
T[] newArray = (T[]) new Object[2 * capacity];
System.arraycopy(genericArray, 0, newArray, 0, capacity);
genericArray = newArray;
capacity *= 2;
}
private void halveCapacity() {
T[] newArray = (T[]) new Object[capacity / 2];
System.arraycopy(genericArray, 0, newArray, 0, size);
genericArray = newArray;
capacity /= 2;
}
public String toString() {
StringBuilder strb = new StringBuilder();
for (int i = 0; i < size; i++) {
if (i > 0) {
strb.append(',');
}
strb.append(genericArray[i]);
}
return strb.toString();
}
}