//自定义一个长度可变的数组 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类来具体化泛型。
对于长度可变数组的操作:
存放数据
取出数据
删除数据
修改数据
数据个数