package com.zl.ext.collection;
import java.util.Arrays;
/**
* @packagb:com.zl.ext.collection
* @Author: fab
* @Description:数组实现Arralist,主要是扩容(添加元素)和缩容问题(删除元素)
* @Date:
* @Modified By:
*/
public class MyExtArrayList<T> {
/**
* 初始化数组
*/
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
/**
* 存放元素
*/
private Object[] elementData;
/***
* elementData中存放元素的个数
*/
private int size;
/**
* 初始容量
*/
private static final int DEFAULT_CAPACITY = 10;
/**
* 默认构造函数
*/
MyExtArrayList() {
}
/**
* 添加元素
*
* @param e
*/
public void add(T e) {
if (elementData == null) {
elementData = new Object[DEFAULT_CAPACITY];
}
//进行扩容
if (size + 1 > elementData.length) {
//原来的容量
int oldCapacity = elementData.length;
//扩容后的容量
int newCapacity = oldCapacity + (oldCapacity >> 1);
//扩容
elementData = Arrays.copyOf(elementData, newCapacity);
}
elementData[size++] = e;
}
/**
* 获得指定位置元素
*
* @param index
* @return
*/
public T get(int index) {
return (T) elementData[index];
}
/**
* 移除元素
* 将移除元素后面的数组覆盖之前的位置 之后再讲数组之后位置设置null
*
* @param t
*/
public void remove(T t) {
for (int index = 0; index < size; index++) {
if (elementData[index].equals(t)) {
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index + 1, elementData, index, numMoved);
elementData[--size] = null;
}
}
}
/**
* 返回元素个数
*
* @return
*/
public int size() {
return size;
}
/**
* 返回数组容量
*
* @return
*/
public int capacity() {
return elementData.length;
}
public static void main(String args[]) {
MyExtArrayList myExtArrayList = new MyExtArrayList();
for (int i = 0; i < 10; i++) {
myExtArrayList.add(i);
}
myExtArrayList.add(11);
System.out.println("容量大小:"+myExtArrayList.capacity());
System.out.println("数据大小:"+myExtArrayList.size());
System.out.println("第一个元素为:"+myExtArrayList.get(0));
myExtArrayList.remove(0);
System.out.println(myExtArrayList.size());
}
}