package 基本数据结构;
/**
* Created by LIANG on 2017/2/24.
*/
public class MyArrayList<E> implements MyList<E>
{
public static final int INITIAL_CAPACITTY = 16;
private E[] data = (E[]) new Object[INITIAL_CAPACITTY];
private static int size = 0;
public MyArrayList(E[] objects)
{
for (int i = 0; i < objects.length; i++)
{
add(objects[i]);
size++;
}
}
public MyArrayList() {}
;
public void ensureCapicity()
{
if (size >= data.length)
{
E[] newData = (E[]) new Object[size * 2];
System.arraycopy(data, 0, newData, 0, data.length);
data = newData;
}
}
// public boolean add(E e)
// {
// ensureCapicity();
// if(e != null)
// data[size++] = e;
// return true;
// }
public void add(E e)
{
add(size, e);
}
@Override
public void add(int index, E e)
{
ensureCapicity();
for (int i = size - 1; i >= index; i--)
{
data[i + 1] = data[i];
}
data[index] = e;
size++;
}
@Override
public E get(int index)
{
return data[index];
}
@Override
public E remove(int index)
{
checkIndex(index);
E e = data[index];
for (int i = index; i < data.length - 1; i++)
data[i] = data[i + 1];
data[size - 1] = null;
size--;
return e;
}
private void checkIndex(int index)
{
if (index < 0 || index >= size)
throw new IndexOutOfBoundsException("输入下标有误");
}
@Override
public int size()
{
return size;
}
@Override
public void clear()
{
data = (E[]) new Object[INITIAL_CAPACITTY];
size = 0;
}
@Override
public int indexOf(E e)
{
for (int i = 0; i < size; i++)
{
if (e.equals(data[i]))
return i;
}
return -1;
}
@Override
public boolean isEmpty()
{
return size == 0;
}
@Override
public E set(int index, E e)
{
checkIndex(index);
E temp = data[index];
data[index] = e;
return temp;
}
@Override
public boolean contains(E e)
{
for (int i = 0; i < size; i++)
{
if(data[i].equals(e))
return true;
}
return false;
}
public void trimToSize()
{
if (size != data.length)
{
E[] newData = (E[]) new Object[size];
System.arraycopy(data, 0, newData, 0, size);
data = newData;
}
}
@Override
public String toString()
{
StringBuilder result = new StringBuilder("[");
for (int i = 0; i < size; i++)
{
result.append(data[i]);
if (i < size - 1)
result.append(",");
}
return result.toString() + "]";
}
private class ArrayListIterator implements Iterator
{
private int current = 0;
@Override
public boolean hasNext()
{
return (current < size);
}
@Override
public E next()
{
return data[current++];
}
@Override
public void remove()
{
MyArrayList.this.remove(current);
}
}
}