泛型动态数组(java)

本文是《玩转数据结构》课程中对数组的复习。

数组类:

/*
动态泛型数组 支持所有类元素的存储
 */
public class MyArray<E> {//*数组中使用泛型,E表示任意类型
    private int size;
    private E[] datas;

    //构造函数,capacity初始容量,默认为2
    public MyArray(int capacity){
        //datas=new E[capacity];//E类型不能直接new
        datas=(E[])new Object[capacity];
        //*java中E不能直接new,由Object转化转化为E[]子类
    }
    public MyArray(){
        datas=(E[])new Object[2];
    }
    //查看数据数量
    public int getSize(){
        return size;
    }
    //查看是否为空
    public boolean isEmpty(){
        return (size==0);
    }
    //查看数组内容
    @Override//表示覆盖父类函数
    public String toString(){
        StringBuilder str=new StringBuilder();//StringBuilder的使用
        str.append("capacity:"+datas.length+"\nsize:"+size+"\ndatas:");
        for(int i=0;i<size;i++)
            str.append(datas[i]+"\t");
        return str.toString();
    }
    //根据下标查看数据
    public E get(int index){
        if(index<0||index>=size){
            throw new IllegalArgumentException("Get Failed.Index is illegal");
        }
        return datas[index];
    }
    //根据下标修改元素
    public boolean set(int index,E data){
        if(index<0||index>=size)
            return false;
        else{
            datas[index]=data;
            return true;
        }
    }
    //删除指定位置数据
    public boolean remove(int index){
        if(index<0||index>=size)
            return false;
        for(int i=index;i<size-1;i++){
            datas[i]=datas[i+1];
        }
        size--;
        datas[size]=null;
        //*置为空才能进行垃圾回收 lolitering objects闲逛元素
        return true;
    }
    //根据数值获得索引
    public int find(E data){
        for(int i=0;i<size;i++){
            if(datas[i].equals(data))
            //*类元素相等用equals表示值相等,==表示指向相同               
            return i;
        }
        return -1;//-1下标无效
    }
    //增加元素
    public void add(E data){
        if(size==datas.length){//此元素将放入size处
            E[] newDatas=(E[])new Object[datas.length*2];
            System.arraycopy(datas,0,newDatas,0,datas.length);
            newDatas[size++]=data;
            datas=newDatas;
        }
        else {
            datas[size++] = data;
        }
    }
}

测试类

public class Main {
    public static void main(String[] args) {
        MyArray<Integer> ma = new MyArray<>();
        //*泛型类创建实例
        //*泛型中不能为基本数据类型,只能为类。基本数据类型与相应包装类可以自动转换
        ma.add(6);
        ma.add(5);
        ma.add(4);
        ma.add(3);
        ma.add(1);
        System.out.println(ma.toString());
        System.out.println(ma.find(1));
    }
}
发布了14 篇原创文章 · 获赞 0 · 访问量 301

猜你喜欢

转载自blog.csdn.net/zmx1952822326/article/details/104109713