顺序表的实现

由于java不熟悉,可能有些地方写的不太好,希望各位大神指点,如果有任何疑问欢迎来探讨。
目标只有代码的部分,之后有时间会补充图文。

一个很蛋疼的问题,java居然不支持泛型数组实例化,这个在c#中轻松编译通过的。

package ListExercise;

import java.util.Arrays;

public class ArrayList {
    // 当前数据域
    private Object[] datas = null;

    // 链表的长度
    private int length;
    // 当前下标
    private int curSize;

    // 初始化数组长度,默认值为20
    public ArrayList() {
        this(20);
    }

    // 初始化数组长度
    public ArrayList(int initialSize) {
        if (initialSize >= 0) {
            this.length = initialSize;
            this.datas = new Object[initialSize];
            this.curSize = 0;
        } else {
            throw new RuntimeException("初始化大小不能小于0:" + initialSize);
        }
    }

    // 添加元素
    public boolean add(T data) {
        return add(curSize, data);
    }

    // 按照位置添加元素
    public boolean add(int index, T data) {
        boolean ret = false;
        checkArrayBorder(index);

        if (isFull()) {
            trimSize();
        }

        for (int i = curSize; i > index; i--) {
            datas[i] = datas[i - 1];
        }
        datas[index] = data;
        curSize++;
        ret = true;

        return ret;
    }

    // 删除元素T
    public boolean remove(T t) {
        int index = 0;
        for (int i = 0; i < datas.length; i++) {
            if (datas[i] == t) {
                index = i;
                break;
            }
        }
        return removeAt(index);
    }

    // 检车数组是否越界
    private void checkArrayBorder(int index) {
        if (index < 0 || index > curSize) {
            throw new RuntimeException("插入的长度超出数据范围:" + index);
        }
    }

    // 删除第index个元素 ,下标从0开始
    public boolean removeAt(int index) {
        boolean ret = false;
        checkArrayBorder(index);

        for (int i = index; i < curSize; i++) {
            datas[i] = datas[i + 1];
        }
        datas[curSize] = null;
        ret = true;
        curSize--;
        return ret;
    }

    // 获取第index个元素
    @SuppressWarnings("unchecked")
    public T get(int index) {
        return (T) datas[index];
    }

    // 监测是否满
    public boolean isFull() {
        return curSize == length;
    }

    // 当前长度
    public int size() {
        return curSize;
    }

    // 当前数组是否为空
    public boolean isEmpty() {
        return curSize == 0;
    }

    // 数组扩容
    public void trimSize() {
        length = length * 2;
        datas = Arrays.copyOf(datas, length);
    }

    // 获取总容量
    public int getLength() {
        return length;
    }

    // 打印当前信息
    public void print() {
        for (int i = 0; i < curSize; i++) {
            System.err.println(datas[i]);
        }

    }
}

你可能感兴趣的:(顺序表的实现)