动态数组实现代码


package array;

import java.util.Set;

public class Array<E> {
    private  E[]  data;
    private  int  size;//下一个要放置的位置索引  [0,size-1]是已经放置好的元素
    //有参构造
    public Array(int capacity) {
    	data=(E[])new Object[ capacity];//新建容量大小
    	size=0;//数组里元素个数
    }
    //无参构造
    public Array() {
    	this(10);
    }
    //判断是否为空
    public  boolean  isEmpty() {
    	return size==0;
    }
    //返回元素个数
    public int getSize() {
    	return size;
    }
    //向数组中添加元素
    public void add(E e) {
    	add(size,e);
    }
    //向头部添加元素
    public  void  addFirst(E e) {
    	add(0,e);
    }
    //添加元素
    public void add(int index,E e) {
    	if (index<0||index>size) {
    		throw  new  IllegalArgumentException("add  failed");
		}
    	if (size==data.length) {
    		resize(2*data.length);
    	}
    	for (int i = size-1; i >= index; i--) {
			data[i+1]=data[i];
		}
    	data[index]=e;
    	size++;
    }
    //扩容操作
    private void resize(int i) {
		E[]  newarr=(E[])new Object[i];
		for (int j = 0; j < size; j++) {
			newarr[j]=data[j];
		}
		data=newarr;
		
		
	}
	//打印数组
    @Override
    public  String  toString() {
		StringBuilder  res=new StringBuilder();
		res.append("size="+size+"acpiticy="+data.length+" ");
		res.append("[");
		for (int i = 0; i < size; i++) {
			res.append(data[i]);
			if (i!=size-1) {
				res.append(",");
			}
		}
		res.append("]");
    	
    	return res.toString();
    	
    }
    //取出元素
    public E get(int  index) {
    	if (index<0||index>=size) {
    		throw  new  IllegalArgumentException("get failed");
		}
    	
    	return data[index];
    }
    //给指定位置赋值
    public void  set(int  index,E  e) {
    	if (index<0||index>=size) {
    		throw  new  IllegalArgumentException("set failed");
		}
    	data[index]=e;
    	
    }
    //数组中是否包含制定元素
    public boolean  contains(E  e) {
    	for (int i = 0; i < size; i++) {
			if (data[i].equals(e)) {
				return true;
			}
		}
    	return false;
    }
    //数组指定元素的索引
    public  int  find(E  e) {
    	for (int i = 0; i < size; i++) {
			if (data[i].equals(e)) {
				return i;
			}
		}
    	return -1;
    }
    //删除第一个数
    public E removeFirst() {
    	return remove(0);
    }
    //删除最后一个数
    public E   removeLast() {
    	return remove(size-1);
    }
    //删除指定索引数
    public E  remove (int  index) {
    	if (index<0||index>=size) {
    		throw  new  IllegalArgumentException("remoce failed");
		}
    	E res=data[index];
    	for (int i =index+1 ; i < size; i++) {
			data[i-1]=data[i];
		}
    	
    	size--;
    	if(size==data.length/4) {
    		resize(data.length/2);
    	}
    	return res;
    	
    }
    //删除指定元素
    public void removeElement(E  e) {
    	int  index=find(e);
    	if (index!=-1) {
			remove(index);
		}
    }
}
posted @ 2019-01-28 22:42  胖胖爱吃芒果  阅读(120)  评论(0编辑  收藏  举报