/**
* 接口
* @author Administrator
*
* @param <T>
*/
public interface MyList<T> {
//增加元素
public void add(T t);
//插入元素
public void insert(int index, T t);
//删除数组
public void remove(T t);
//删除指定位置的元素
public void removeAt(int index);
//获取数组的大小
public int size();
//判断数组是否为空
public boolean isEmpty();
//获取元素
public T get(int index);
//设置元素
public void set(int index, T t);
//获取指定位置的元素
public int indexOf(T t);
//清除数组
public void clear();
}
package com.accp.list;
/**
* 实现List的增、删、改、查操作
* @author Administrator
*
* @param <T>
*/
public class MyArrayList<T> extends MyAbstractList<T> {
private T[] list;
/**存储空间的大小*/
private int capacity;
public MyArrayList() {
this(10);
}
public MyArrayList(int capacity) {
this.capacity = capacity;
list = (T[]) new Object[capacity];
}
@Override
/**
* 添加元素:在尾部
*/
public void add(T t) {
ensureCapacity();
list[size++] = t;
}
@Override
/**
* 插入元素
*/
public void insert(int index, T t) {
if(index < 0 || index > size) {
throw new IndexOutOfBoundsException();
}
ensureCapacity();
for(int i = size; i > index; i--) {
list[i] = list[i - 1];
}
list[index] = t;
size++;
}
@Override
/**
* 删除元素
*/
public void remove(T t) {
int index = indexOf(t);
if (index != -1) {
removeAt(index);
}
}
@Override
/**
* 删除指定位置的元素
*/
public void removeAt(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
for (int i = index; i < size - 1; i++) {
list[i] = list[i + 1];
}
size--;
}
@Override
/**
* 数组的大小
*/
public int size() {
return size;
}
@Override
/**
* 判断数组是否为空
*/
public boolean isEmpty() {
return size == 0;
}
@Override
/**
* 获取元素
*/
public T get(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
return list[index];
}
@Override
/**
* 设置指定位置元素的值
*/
public void set(int index, T t) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
list[index] = t;
}
@Override
/**
* 清除数组:使数组的大小变为0
*/
public void clear() {
size = 0;
}
/**
* 追加存储的空间
*/
private void ensureCapacity() {
if (size == capacity) {
T[] temp = (T[]) new Object[capacity * 2];
capacity = capacity * 2;
for (int i = 0; i < size; i++) {
temp[i] = list[i];
}
list = temp;
}
}
}
package com.accp.list;
/**
* 抽象类
* @author Administrator
*
* @param <T>
*/
public abstract class MyAbstractList<T> implements MyList<T> {
protected int size;
@Override
public int size() {
return size;
}
@Override
public boolean isEmpty() {
return size==0;
}
@Override
public int indexOf(T t) {
for (int i = 0; i < size; i++) {
if (get(i).equals(t)) {
return i;
}
}
return -1;
}
}