自定义一个长度可变含初始容量的泛型数组

//自定义一个长度可变的数组
public class DTSZ<E> {
	//定义容量变量
	private int initSize;
	//定义一个长度为0的数组
	private Object[] src = new Object[initSize];
	//记录数组的长度
	private int num=0;
	//初始化容量
	public DTSZ(int initSize){
		this.initSize=initSize;
	}
	
	//添加数据的方法
	public void add(E e){
		//如果数组还没放满就放入数组第一个空位
		if(num<src.length){
			
		}else{
			//如果放满了就增加数组的容量 
			Object[] dest=new Object[src.length+initSize];
			//将原数组中的元素复制到新数组中
			System.arraycopy(src, 0, dest, 0, src.length);
			src=dest;
		}
		//将数据存入数组中
		src[num++]=e;
	}
	//获取数据
	public E get(int index){
		//判断下标是否越界
		if(index>=0&&index<num){
			return (E)src[index];
		}else{
		return null;
		}
	}
	//根据下标删除数据
	public void delete(int index){
		//将index+1的数据复制到index复制num-index-1位数据
		System.arraycopy(src, index+1, src, index, num-index-1);
		this.num--;
		//判断数组容量是不是长度的倍数
		if(num%initSize==0){
			//如果是 就新创建一个数组减小一个容量,将原数字中的数据复制到新数组
			Object[] dest = new Object[src.length-initSize];
			System.arraycopy(src, 0, dest, 0, num);
			src=dest;
			
		}
		
		
	}
	//根据内容删除数据删除第一个出现的
	public void delete(E e){
		//定义一个错误的下标
		int t=-1;
		//遍历数组判断数组里有没有输入的值
		for(int i=0;i<num;i++){
			if(src[i].equals(e)){
				//如果有就把数组中的这个数据的下标赋给t
				t=i;
				break;
			}}
			
			if(t>=0){
				//调用上一个删除下标的方法
				delete(t);
			
		}
		
		
	}
	//插入数据的方法
	public void insert(int index,E e){
		src[index]=e;
		System.arraycopy(src, index, src, index+1, num-index);
		num++;
	}
	
	//修改数据的方法
	public void update(int index,E e){
		src[index]=e;
	}
	//获取数据个数的方法
	public int size(){
		return num;
	}
	

}
//测试数组
public class DTMain { 
public static void main(String[] args) {
  //创建一个Integer类型的长度可变数组(容量为10)
  DTSZ<Integer> dt=new DTSZ<Integer>(10);
  
  //添加数据
  for(int i=0;i<11;i++){
   dt.add(i);
   int a=dt.get(i);
       System.out.println(a);
  }
  //删除下标为2的数据
   dt.delete(2);
         for(int i=0;i<dt.size();i++){
          Integer a=dt.get(i);
          System.out.println(a);
          
         }
      //删除内容为5的数据
      Integer t=5; 
      dt.delete(t);
      for(int i=0;i<dt.size();i++){
          Integer a=dt.get(i);
          System.out.println(a);
          
         }
      //将数据0插入到下标为0的位置
      dt.insert(0, 0);
      for(int i=0;i<dt.size();i++){
          Integer a=dt.get(i);
          System.out.println(a);
          
         }
      //获取下标为0的数据
      Integer k=dt.get(0);
      System.out.println(k);
      
      //获取数据的个数
      int j=dt.size();
      System.out.println(j);
 }
}

数据结构:存储数据的容器,不同的结构体现为数据的存储方式
                        以及数据之间的关系不一样
数据结构分为:数组,长度可变数组,栈,堆,链表,
                       队列,集合,映射,树(二叉树)

        要求:自定义长度可变的指定初始容量的泛型数组
        自定义长度:解决数组长度不可变的问题
        初始容量:减少了操作数据的时间(在数据还没有达到容量时不需要创建新的数组)
        泛型:在定义的时候将类定义成变量,等到具体使用的时候[创建对象时]在明确这个类的类型。
                  只能用在成员方法和构造方法中,泛型的具体化必须是引用类型。
                  如果创建对象时没有给泛型具体化,系统默认会使用Object类来具体化泛型。
        对于长度可变数组的操作:
                                                 存放数据
                                                 取出数据
                                                 删除数据
                                                 修改数据
                                                 数据个数

猜你喜欢

转载自975865409.iteye.com/blog/2345041