Encapsulation of dynamic array

Encapsulation of dynamic array

Function: realize the functions of adding, deleting, modifying, checking, inserting, etc. of the array The
realization process is as follows:

package DynamicArray;

public class MyArray <E>{
    
    
    private E []data; //1新键一个数组
    private int size;  //2 新键计数数组个数
	public MyArray(int size) {
    
    
		data=(E[])new Object[size];
		size=0;
	}
	public MyArray() {
    
      //3 初始化完成
	        this(10);
	}
	// 4添加方法>任意位置
	public void add(int index,E e) {
    
    
		//判断index 是否越界
		if(index>size||index<0) {
    
    
			throw new IllegalArgumentException("下标越界");
		}
		//判断是否需要阔容  >>等于最后一个元素
		if(size==data.length) {
    
    
			resize(data.length*2);
		}
		//腾出位置>>>size是先行指针,要退回一格
		for(int i=size-1;i>=index;i--) {
    
     // -1  i>=0  i--
			data[i+1]=data[i];
		}
		//在index的位置添加e,并维护size;
		data[index]=e;
		size++;  //size是先行的
	}

	// 5增加方法>尾部添加 
	public void addLast(E e) {
    
    
		//如果数组存放满了,无法继续添加
		add(size,e);

	} 
	//6 增加方法>在头部添加
	public void addFirst(E e) {
    
    
		add(0,e);
	}
	//6 删除方法 > 删除指定元素
	//7 删除 >>指定索引值
	public E removeIndex(int index) {
    
    
		// TODO Auto-generated method stub
		if(index>=size||index<0) {
    
    
		throw new IllegalArgumentException("remove faile,index is illegal");
		}
		//找出待删除元素并存储起来
		E res =data[index];
		for(int i=index;i<size;i++) {
    
    
			data[i]=data[i+1]; //往前挪一位进行 覆盖
		}
		//维护size ,因为元素数目减少一位
		size--;
		//懒得算法 缩容>>具有一定弹跳性
		if(size==data.length/4&&data.length!=1) {
    
    
			resize(data.length/2);
		}
		return res;
	}
	//8删> 尾部
	public  E removeLast() {
    
    
		return removeIndex(size-1);
	}
	//9 删 >头部
	public E removFirst() {
    
    
		return removeIndex(0);
	}
	//10查> 指定索引
	public int findIndex(int e) {
    
    
		// TODO Auto-generated method stub
		for(int i=0;i<size;i++) {
    
    
			if(data[i].equals(e)) {
    
    
				return i;
			}
		}
		return -1;
	}
	//11改> 
	public void set(int index ,E e) {
    
    
		//改元素之前先判断
		if(index>size||index<0) {
    
    
			throw new IllegalArgumentException("set fail,index is Illgal");
		}
		data[index]=e;
	}
	//12 查> 是否含有该元素
	public boolean contain(E e) {
    
    
		for(int i=0;i<size;i++) {
    
    
		 //值的比较
			if(data[i].equals(e)) {
    
    
				return true;
			}
		}
		return false;
	}
	//12 查 > 索引查元素
	public E getElement(int index) {
    
    
		//判断索引是否越界
		if(index>=size||index<0) {
    
    
		throw new IllegalArgumentException("get index fail,index is illegal");
		}
	      return data[index];
	}
	//13 查 >元素查索引
	public int getIndex(int i) {
    
    
		return findIndex(i);
	}
	//20 阔容 > 新键一个原先大小两倍数组空间,将原先数组元素一存放到新的数组里面取
	public void resize(int newcapacity) {
    
    
		// TODO Auto-generated method stub
		E []newdata=(E[])new Object[newcapacity];
		for(int i=0;i<size;i++) {
    
    
			newdata[i]=data[i];
		}
		data=newdata;
	}
	//21 实现栈 新增加的方法
	public E getLast() {
    
      //拿到最后一个元素
		return getElement(size-1);
	}
	//22 拿到元素的个数
	public int getSize() {
    
    
		return size;
	}
	//23 判断队列是否为空
	public boolean isEmpty() {
    
    
		return size==0;
	}
	
	
    //重写toStriing
	@Override
	public String toString() {
    
    
		// TODO Auto-generated method stub
    StringBuffer res=new StringBuffer();
    res.append(String.format("Array:size=%d,capacity=%d\n", size,data.length));
     res.append("[");
     //遍历数组
     for(int i=0;i<size;i++) {
    
    
    	 if(i==size-1) {
    
    
    		 res.append(data[i]);
    	 }else {
    
    
    		 res.append(data[i]+",");
    	 }
     }
     res.append("]");
    return res.toString();
	}
    
}

test

package DynamicArray;
public class ArrayTest {
    
    
public static void main(String[] args) {
    
    
	MyArray<Integer>arr=new MyArray();
	arr.addFirst(8);
	arr.addLast(10);
	arr.addFirst(7);
	arr.addFirst(3);
	arr.addLast(20);
	arr.addLast(6); //增
	  
	arr.add(1, 2); //增 >插
    arr.removeIndex(2);  //删 > 索引 
    arr.removeLast(); // 删 >尾部
//    arr.removFirst(); //删 >头部
    arr.set(1, 100);   //改
    
//    System.out.println("索引为:"+element);
    
    int index=arr.getIndex(10);
    System.out.println(index);
	System.out.println(arr.toString());
}
}

Realization effect:
Insert picture description here

Guess you like

Origin blog.csdn.net/weixin_45952706/article/details/108972755