定义了List接口,定义我们想要实现的ArrayList类想要的功能方法
public interface List {
public void add(Object obj);
public int size();
public void add(int i,Object obj);
public void remove(Object obj);
public void remove(int index);
public String toString();
public void clear();
public void addFirst(Object obj);
public void addLast(Object obj);
}
定义MyArrayList类实现List接口,重写接口抽象方法 具体算法实现细节参照代码注释
package com.dataList;
import java.util.Arrays;
public class MyArrayList implements List {
private int size = 0; //定义动态集合容量大小
private Object[] elementData; //集合内部实现是一个object对象数组
public MyArrayList(){ //空参数构造器 默认创建一个大小为4的object对象数组
this(4); //默认数组大小对外是隐藏 不能访问的
}
public MyArrayList(int count){ //有参数构造器
elementData = new Object[count];
}
//通过索引获取元素对象
public Object getEle(int index){
if(index < 0 || index >=size){
throw new RuntimeException("数组越界异常");
}
return elementData[index];
}
//返回集合容量大小
public int size() {
return size;
}
//向集合尾部添加元素 每次成功添加一个元素够 size增加一
public void add(Object obj) {
this.add(size, obj);
// if(size==elementData.length){
// elementData = Arrays.copyOf(elementData, elementData.length*2);
// }
// elementData[size] =obj;
// size++;
}
public void add(int i, Object obj) {
if(i<0 || i>size){
throw new RuntimeException("数组越界异常");
}
//当集合存储元素个数等于内部数组大小时 将内部数组大小容量扩大为原来的两倍
if(size == elementData.length){
elementData = Arrays.copyOf(elementData, elementData.length*2);
}
//索引i后的元素往后移动一位 空出索引i处的存储位置
for(int j=size;j>i;j--){
elementData[j] = elementData[j-1 ];
}
elementData[i] =obj;
//存储存储元素成功 size增加一位
size++;
}
public void remove(int index){
if(index < 0 || index > size){
throw new RuntimeException("数组越界异常");
}
for(int i =index;i<size-1;i++){
elementData[i]=elementData[i+1];
}
size--;
}
//删除元素匹配集合中的元素
public void remove(Object obj) {
for(int i = 0;i<size;i++){
if(elementData[i].equals(obj)){
for(int j=i;j<size-1;j++){
elementData[j] = elementData[j+1];
}
size--;
}
}
}
//转为字符串
public String toString(){
if(size==0){
return "[]";
}
StringBuilder builder = new StringBuilder("[");
for(int i =0;i<size;i++){
if(i!=size-1){
builder.append(elementData[i]+",");
}else{
builder.append(elementData[i]);
}
}
builder.append("]");
return builder.toString();
}
//清除集合所有元素
public void clear(){
for(int i =0;i<size;i++){
elementData[i] =null;
}
size =0;
}
//将元素添加到集合的头部
public void addFirst(Object obj) {
add(0, obj);
}
//该添加方法略有多余
public void addLast(Object obj) {
add(size, obj);
}
}