package cn.ahjz.datastructure;
import java.util.*;
/**
* 模仿ArrayList基本操作
* Created by cs on 2019/1/14.
*/
@SuppressWarnings("Since15")
public class MyList {
private Object[] elementData;//底层是一个数组
private int size;//元素的个数
/**
* 如果不给定初始长度 默认长度是5
*/
public MyList() {
this(5);
}
/**
* 如果给定初始长度
*
* @param initialCapacity 数组的初始长度
*/
public MyList(int initialCapacity) {
elementData = new Object[initialCapacity];
}
public int size() {
return size;
}
public boolean isEmpty() {
return false;
}
/**
* 判断数组时候满了
*
* @return 满了返回true
*/
public boolean checkFull() {
return size == elementData.length;
}
public boolean contains(Object o) {
return false;
}
public Object[] toArray() {
return new Object[0];
}
/**
* 添加元素
*
* @param t
*/
public void add(Object t) {
this.add(size,t);
// //检查是否需要扩容
// if (this.checkFull()) {
// //扩容
// grow();
//
// }
//
// elementData[size] = t;
//
// size++;
}
public void add(int i, Object o) {
//检查是否需要扩容
if (this.checkFull()) {
//扩容
grow();
}
//后移i及其后面元素,从最后一个元素开始
for (int j = size; j > i; j--) {
elementData[j] = elementData[j - 1];
}
elementData[i] = o;
size++;
}
/**
* 扩容 每次增加2倍
*/
public void grow() {
elementData = Arrays.copyOf(elementData, (elementData.length) * 2);
}
/**
* 根据指定Index删除元素
* @param index
* @return
*/
public void remove(int index) {
for (int j=index;j<size-1;j++){
elementData[j]=elementData[j+1];
}
size--;
}
/**
* 获取指定下标的值
*
* @param index 索引
* @return
*/
public Object get(int index) {
if (index < 0 || index > size - 1) {
throw new IndexOutOfBoundsException("数组索引越界" + index);
}
return elementData[index];
}
}