自己实现一下底层,就几个简单功能吧~(自己总结)
package Score;
// 自定义一个异常
class IllegeInitialCapacityException extends RuntimeException{
IllegeInitialCapacityException(String message){
super(message);
}
}
public class MyArrayList<E> {
// 内置数组
private Object[] elementData;
// 有效长度
private int size;
// 默认初始化容量
private static final int DEFAULT_CAPACITY = 10;
// 默认构造器
public MyArrayList(){
this(DEFAULT_CAPACITY);
}
// 可以初始化容量的构造器
public MyArrayList(int initialCapacity){
if (initialCapacity < 0)
throw new IllegeInitialCapacityException("InitialCapacityEccept:" + initialCapacity);
this.elementData = new Object[initialCapacity];
}
// 返回数组长度
public int size(){
return size;
}
// 数组扩容
private void ensureCapacityInternal(int minCapacity){
if (minCapacity > elementData.length){
Object[] newElementData = new Object[size*2+1];
System.arraycopy(elementData,0,newElementData,0,elementData.length);
elementData = newElementData;
}
}
public boolean add(E e) {
// 先判断容量
ensureCapacityInternal(size + 1);
elementData[size++] = e;
return true;
}
// 判断数组元素是否为空
public boolean isEmpty(){
return size == 0;
}
// 下标越界检查
public void rangeCheck(int index){
if(index >= size || index < 0)
throw new IndexOutOfBoundsException("数组下标越界");
}
// 根据下标获取元素
public E get(int index){
rangeCheck(index);
return (E)elementData[index];
}
// 删除元素(实现删除操作)
public void fastRemove(int index){
int numMoved = size - index - 1;
if (numMoved > 0){
System.arraycopy(elementData,index+1,elementData,index,numMoved);
}
elementData[--size] = null;
}
// 真正的元素删除(通过下标删除)
public E remove(int index){
rangeCheck(index);
E oldValue = (E)elementData[index];
fastRemove(index);
return oldValue;
}
// 通过对象删除
public boolean remove(Object obj){
if (obj == null){
for (int index = 0; index < size; index++){
if (elementData[index] == null){
fastRemove(index);
return true;
}
}
}else {
for (int index = 0; index < size; index++) {
if (elementData[index].equals(obj)) {
fastRemove(index);
return true;
}
}
}
return false;
}
//测试
public static void main(String[] args) {
MyArrayList myarray = new MyArrayList(2);
myarray.add(10);
myarray.add(45);
myarray.add(56);
myarray.add("jkdgfj");
System.out.println(myarray.get(0)+"hhaha"+myarray.size()+" "+myarray.elementData.length);
// System.out.println(myarray.isEmpty());
// System.out.println(myarray.remove(0));
System.out.println(myarray.get(1));
// System.out.println(myarray.get(2));
System.out.println(myarray.remove(new Integer(45)));
System.out.println(myarray.get(1));
}
}