二次封装java数组且实现动态扩容

     今天呢,我在这里跟大家分享一下关于数据结构与算法中的基础(数组),数组对于学软件的来说一定不陌生,什么c,c++,java,go,javascript等等语言都会有。但是大家在使用的过程中可能并没有去深究数组底层到底是如何实现的,所以,在这里封装了一个java的动态数组,代码如下::::::::

package com.zp;

import com.sun.xml.internal.ws.server.sei.ValueGetter;

/**
 *二次封装数组,动态数组
 * @author zhaopeng
 * @create 2019-12-22 21:52
 */
public class Array{
   private E[] data;//存放数据的数组

   private int size;//记录数据的个数

   public Array(int capaticy){
       data=(E[])new Object[capaticy];//java不支持泛型数组的创建,需要强制转换
   }

   public Array(){//默认的为10
       this(10);
   }

   //获取数组的元素个数
   public int getSize(){
       return size;
   }
   //获取数组的容量
   public int getCapacity(){
       return data.length;
   }

   //判断是否为空
   public boolean isEmpty(){
       return size==0;
   }

   //在元素后添加数据
   public void addLast(E e){
          add(size,e);
   }

   //向所有的元素前添加一个新的元素
    public void addFirst(E e){
       add(0,e);
    }

   //在指定的索引插入新的元素
   public void add(int index,E e){
       if(size==data.length){
           resize();//扩容
       }
       if(index<0||index>size){  //index    0-----size
          throw new IllegalArgumentException("索引越界");
       }
       for(int i=size-1;i>=index;i--){
           data[i+1]=data[i];
       }
      // System.arraycopy(data,index,data,index+1,data.length-index-1);
       data[index]=e;
       size++;
   }

   //根据索引获取值
   public E get(int index){
       if(index<0||index>=size){  //index    0-----size
           throw new IllegalArgumentException("索引越界");
       }
       return data[index];
   }

   //获取最后一个值
   public E getLast(){
       return get(size-1);
   }

   //获取第一个值
   public E getFirst(){
       return get(0);
   }
   //设置相应位置的值
   public void set(int index,E e){
       if(index<0||index>=size){  //index    0-----size
           throw new IllegalArgumentException("索引越界");
       }
       data[index]=e;
   }

   //查找数组中是否存在元素e
   public boolean contains(E e){
       for(int i=0;i=size){  //index    0-----size
           throw new IllegalArgumentException("索引越界");
       }
       E res=data[index];
       for(int i=index+1;i>1);//新的容量
         E[] newarray=(E[])new Object[newcapacity];
        // System.arraycopy(data,0,newarray,0,data.length);//数组的copy
         for(int i=0;i

 

文章到此结束,测试代码大家可自行书写,谢谢大家的阅读。如果有什么问题,欢迎大家评论区留言哦!!!

你可能感兴趣的:(数据结构与算法)