java学习之—实现一个简单的ArrayList

时间:2023-03-09 01:30:59
java学习之—实现一个简单的ArrayList
package thread1;

/**
* 实现一个简单的ArrayList
*
* @Title: uminton
*/
public class SimpleArrayList<T> { //数组中元素的大小
private Integer elementSize = 0;
//创建SimpleArrayList时,数组的容量,默认为16
private Integer arrayCapacity = 16;
//当数组容量不够时,默认每次扩容的大小
private static final Integer DEFUALT_EXPAND_SIZE = 16;
//元素容器
Object[] array = null; //无参数构造,设置默认容量
public SimpleArrayList(){
this(DEFUALT_EXPAND_SIZE);
} /**
* 有参数构造,创建容器,设置数组大小
* @param arrayCapacity
*/
public SimpleArrayList(Integer arrayCapacity){
super();
if(arrayCapacity < 0){
throw new IllegalArgumentException("数组空间越界");
}
array = new Object[arrayCapacity];
this.arrayCapacity = arrayCapacity;
} /**
* 插入一个新元素,如果数组可以放下,直接添加
* 如果数组中放不下,扩容
* @param v
*/
public void add(T v){
//如果数组可以放下,直接添加
if(elementSize < arrayCapacity){
array[elementSize++] = v;
}else { //如果数组放不下,扩容后再添加
arrayCapacity += DEFUALT_EXPAND_SIZE; //扩容
System.out.println("数组放不下扩容:"+arrayCapacity);
Object[] newArray = new Object[arrayCapacity];
//创建新的数组
System.arraycopy(array,0,newArray,0,array.length);
//拷贝数据到新的数组
array = newArray;
//从新的数组赋值到原数组
array[elementSize++] = v;//添加
}
} /**
* 根据指定下标查找元素
* @param index
* @return
*/
public T get(int index){
if(index > elementSize-1 || index < 0){
throw new ArrayIndexOutOfBoundsException(index);
}
return (T) array[index];
} /**
* 删除指定位置的元素,所有之后的元素需要前移
* @param index
*/
public void remove(int index){
if(index > elementSize-1 || index < 0){
throw new ArrayIndexOutOfBoundsException(index);
}
for (int i = index; i < elementSize-1; i++) {
array[i] = array[i+1]; //覆盖前一个数据
}
elementSize--;
} /**
* 更新指定位置上的元素
* @param index
* @param t
*/
public void update(int index,T t){
if(index > elementSize-1 || index < 0){
throw new ArrayIndexOutOfBoundsException(index);
}
array[index] = t;
} /**
* 返回array中元素的大小
* @return
*/
public Integer size(){
return elementSize;
} public Integer capacity(){
return arrayCapacity;
} public static void main(String[] args) {
SimpleArrayList<Integer> list = new SimpleArrayList<>();
//添加
for (int i = 0; i < 20; i++) {
list.add(i);
}
//遍历
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i)+" ");
} //删除index为10的元素
list.remove(10); for (int i = 0; i < list.size(); i++) {
System.out.println("index:"+i+";value:"+list.get(i));
} System.out.println("size:" + list.size() + ",capacity:" + list.capacity());
} }