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