版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33696779/article/details/69802584
package com.collection;
import java.util.ArrayList;
import java.util.List;
/**
* 模拟ArrayList底层实现基础方法
* @author Mrzhang
*
* @param <E>
*/
public class MyArrayList<E> {
//基础数组长度设置
private static final int CAPCITY=10;
//底层数组
transient Object[] elementData;
//加入数据长度,不代表数组长度
private int size;
public MyArrayList(){
this(10);
};
public MyArrayList(int size){
//数组初始化
elementData=new Object[size];
}
//数组扩容处理
private void grow(int index){
if(size==index){
int capcity=elementData.length+(elementData.length>>1);
Object[] newArray=new Object[capcity];
System.arraycopy(elementData, 0, newArray, 0, elementData.length);
elementData=newArray;
}
}
//越界处理
private void rangeCheck(int index){
if(index>=size){
try {
throw new Exception();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("数组越界");
}
}
}
//获取长度
public int size(){
return size;
}
//添加元素
public void add(E e){
grow(elementData.length);
elementData[size++]=e;
}
//在指定位置添加元素
public void add(int index,E e){
rangeCheck(index);
grow(elementData.length);
//注意 数组长度不等于size 可能比size大很多,下边这种方法可能报异常
//int length=elementData.length
//System.arraycopy(elementData, index, elementData, index+1,length-index);
System.arraycopy(elementData, index, elementData, index+1,size-index);
elementData[index]=e;
size++;
}
//替换指定位置元素
public void set(int index,E e){
rangeCheck(index);
elementData[index]=e;
}
//查看元素
public E get(int index){
rangeCheck(index);
return (E) elementData[index];
}
//删除元素
public E remove(int index){
rangeCheck(index);
Object obj=elementData[index];
System.arraycopy(elementData, index+1, elementData, index, elementData.length-(index+1));
elementData[size--]=null;
return (E)obj;
}
//删除指定对象 一次删除一个
public boolean remove(Object e){
if(e==null){
for(int i=0;i<elementData.length;i++){
if(elementData[i]==null){
remove(i);
return true;
}
}
}else{
for(int i=0;i<elementData.length;i++){
if(elementData[i].equals(e)){
remove(i);
return true;
}
}
}
return false;
}
public static void main(String[] args) {
MyArrayList arrayList=new MyArrayList();
arrayList.add("二哈");
arrayList.add("三哈");
arrayList.add("四哈");
arrayList.add(2,"五哈");
arrayList.set(1, "十哈");
arrayList.add(null);
arrayList.remove(null);
for(int i=0;i<arrayList.size();i++){
System.out.println(arrayList.get(i));
}
//这里只实现了我们常用的一些方法,关于其他测试,大家也可以看源码来分析实现
}
}