实现自己的ArrayList集合
package com.scc.demo;
import java.util.Arrays;
public class MyArrayList {
// 因为Object是所有类直接或间接父类,可以接受任何子类的对象
private Object[] element=null;//默认就是null
//提供一个属性可以统计当前数组中存储元素的个数
private int size=0;
//在创建空的ArrayList时,默认会创建一个大小为10的数组
private static final int DEFAULT_INIT_CAPACITY = 10;
//提供构造方法
public MyArrayList() {
//在创建的时候,给有参构造一个数组为10的参数 initCapacity
this(10);
}
public MyArrayList(int initCapacity) {
//参数异常
if(initCapacity<0) {
throw new IllegalArgumentException("容量不能为零");
}
element=new Object[initCapacity];
}
//向集合中添加元素
public void add(Object ele) {
//需要判断集合大小需要进行扩容,若不等于零,就size++,循环
if(size==element.length) {
//扩容
Object[] obj=Arrays.copyOf(element, element.length*2);
//将新数组的引用 给原有数组
element=obj;
}
//添加元素
element[size]=ele;
//这个size记录的就是集合的真实大小
size++;
}
//获取集合中的元素
public Object getEle(int index) {
//判断下表
if(index<0||index>size) {
throw new ArrayIndexOutOfBoundsException("索引越界");
}
return element[index];
}
//设置指定位置的集合元素
public void set(int index,Object newobj) {
if(index<0||index>size) {
throw new ArrayIndexOutOfBoundsException("索引越界");
}
element[index]=newobj;
}
//删除指定索引位置的元素
public void remove(int index) {
if(index<0||index>size) {
throw new ArrayIndexOutOfBoundsException("索引越界");
}
//数组不能被 删除 但是 可以覆盖来 然后再自减 来达到缩小的目的
for(int i=index;i<size-1;i++) {
//后一位向前一位移动
element[i]=element[i+1];
}
//把最后一位设置为null即可
element[size-1]=null;
//把集合大小进行缩减
size--;
}
//ArrayList集合是可以直接打印结果,因为重写了toString
@Override
public String toString() {
if(element==null) {
return null;
}
if(size==0) {
return "[]";
}
StringBuffer sbr=new StringBuffer();
sbr.append("[");
for(int index=0;index<size-1;index++) {
sbr.append(element[index]);
if(index!=size-1) {
sbr.append(",");
}else {
sbr.append("]");
}
}
return sbr.toString();
}
//返回集合中的元素个数
public int size() {
return size;
}
//判断集合中元素是否为空
public boolean isEmpty() {
return size==0;
}
//清空集合
public void clear() {
element=new Object[DEFAULT_INIT_CAPACITY];
size=0;
}
//有时间在实现数组的其他功能....................
}