用数组实现一个线性表

本文介绍了一个使用数组实现的线性表MyArrayList,实现了List接口,包括添加、删除、设置、获取元素等操作。当数组满时,会自动扩容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用数组写了一个线性表,但是没有测试,如果有问题,会在后面或回复指出。

public interface List<T> {
    public boolean add(T newEntry);
    public void add(int index, T newEntry);
    public T remove(int index);
    public void clear();
    public T set(int index, T entry);
    public T get(int index);
    public boolean contains(T entry);
    public int size();
    public boolean isEmpty();
}

public class MyArrayList<T> implements List<T> {

    private T[] array;
    private int length;                            //存放数组中实际元素的个数
    private int size;                            //存放数组的长度
    private static final int MAX_SIZE = 50;        //数组的默认长度
    
    public MyArrayList() {
        this(MAX_SIZE);
    }
    public MyArrayList(int size) {
        length = 0;
        this.size = size;
        array = (T[]) new Object[size];//注意创建泛型数组或引用对象时,使用此种方式
    }
    
    //判断当前数组是否已经装满
    public boolean isFull() {
        return length == size ? true : false;
    }
    
    public void doubleArray() {
        T[] oldList = array;
        array = (T[]) new Object[oldList.length * 2];
        for(int i = 0; i < oldList.length; i++) {
            array[i] = oldList[i];
        }
        
    }
    @Override
    public boolean add(T newEntry) {
        if(isFull()) {
            size = array.length * 2;
            doubleArray();
        }
        array[length++] = newEntry;
        return true;
    }

    @Override
    public void add(int index, T newEntry) {            //index是数组的下标,从0开始的
        if(isFull()) {
            size = array.length * 2;
            doubleArray();
        }
        for(int i = array.length; i > index; i--) {
            array[i] = array[i - 1];
        }
        array[index] = newEntry;

    }

    @Override
    public T remove(int index) {
        if(isEmpty()) {
            return null;
        } 
        else{
            T tmp = array[index];
            for(int i = index; i < length; i++) {
                array[i] = array[i + 1];
            }
            return tmp;
        }
        
    }

    @Override
    public void clear() {
         for(int i = 0; i < length; i++)
             array[i] = null;
         length = 0;
    }

    @Override
    public T set(int index, T entry) {
        if(index < 0 || index > length - 1)
            return null;
        else {
            T tmp = array[index];
            array[index] = entry;
            return tmp;
        }
    }

    @Override
    public T get(int index) {
        if(index < 0 || index > length - 1)
            return null;
        else
            return array[index];
    }

    @Override
    public boolean contains(T entry) {
        boolean found = false;
        for(int i = 0; i < length; i++)
            if(entry.equals(array[i]))
                found = true;
        return found;    
    }

    @Override
    public int size() {//返回已经存放了多少数据,而不是数组的存储长度
        return length;
    }

    @Override
    public boolean isEmpty() {
        return length == 0 ? true : false;
    }

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值