手写ArrayList

1.首先编写ExtList接口()

package com.itmayiedu.list;
public interface ExtList<E> {
      public void add(E object);
      public void add(int index, E object);
      public Object remove(int index);
      public boolean remove(E object);
      public int getSize();
      public Object get(int index);
}

2.然后再编写实现类ExtArrayList

package com.itmayiedu.list;
import java.util.Arrays;
public class ExtArrayList<E> implements ExtList<E>{
	//保存ArrayList中数据的数组
	private transient Object[] elementData;
	
	//ArrayList实际数量
	private int size;
	public ExtArrayList(){
		this(10);
	}
     public ExtArrayList(int initialCapacity){
    	 if(initialCapacity<0){
    		 throw new IllegalArgumentException("Illegal Capacity: " + initialCapacity);
    	 }
    //初始化数组 容量
    	 elementData=new Object[initialCapacity];
     }
     
     //添加  
     public void add(Object object){
    	 //size+1,如果数组容量不够就扩容
    	 ensureExplicitCapacity(size+1);
    	 elementData[size++]=object;
     }
     public void add(int index, E object) {
 		rangeCheck(index);
 		ensureExplicitCapacity(size+1);
 		System.arraycopy(elementData, index, elementData, index+1, size-index);
 		elementData[index]=object;
 		size++;	
 	}
      
     //确保数组的容量充足,扩容
	private void ensureExplicitCapacity(int minCapacity) {
		// 如果存入的数据,超出了默认数组初始容量 就开始实现扩容
    if(size==elementData.length){
    	//获取原来数组的长度为2
    	int oldCapacity=elementData.length;
    	// oldCapacity >> 1 理解成 oldCapacity/2 新数组的长度是原来长度1.5倍
       int newCapacity=oldCapacity+(oldCapacity>>1);
       if(newCapacity<minCapacity){
    	// 最小容量比新容量要小的,则采用初始容量minCapacity
    	   newCapacity=minCapacity;
       }
       elementData = Arrays.copyOf(elementData, newCapacity);
    }		
}

	public Object remove(int index) {
        Object object=get(index);
        int numMoved=elementData.length-index-1;
        if(numMoved>0){
        	System.arraycopy(elementData, index+1, elementData, index,numMoved);
        }
        elementData[--size]=null;
		return object;
	}
	public boolean remove(E object) {
		for(int i=0;i<elementData.length;i++){
			Object element=elementData[i];
			if(element.equals(object)){
				remove(i);
				return true;
			}
		}
		return false;
	}
	public int getSize() {
		return size;
	}
	public Object get(int index) {
       rangeCheck(index);
		return elementData[index];
	}
	private void rangeCheck(int index) {
	if(index>=size){
		throw new IndexOutOfBoundsException("数组越界啦!");
	}		
	}	
}

3.编写测试类TestList

package com.itmayiedu.list;

public class TestList {
 public static void main(String[] args) {
       ExtArrayList<String> extArrayList = new ExtArrayList<String>();
       extArrayList.add("张三");
		extArrayList.add("李四");
		extArrayList.add("王武");
		extArrayList.add(1,"古天乐");
		System.out.println("数组的长度"+extArrayList.getSize());
		System.out.println("获取第一个元素值:" + extArrayList.get(0));
		System.out.println("获取第二个元素值:" + extArrayList.get(1));
		System.out.println("获取第三个元素值:" + extArrayList.get(2));
		System.out.println("获取第四个元素值:" + extArrayList.get(3));		
}
}

在这里插入图片描述

bmV0L3FxXzQwMjQxOTU3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java全栈研发大联盟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值