顺序表的实现

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

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

package ListExercise;

import java.util.Arrays;

public class ArrayList<T> {
    // 当前数据域
    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]);
        }

    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,573评论 25 708
  • 突然发现自己再无处可躲,终究还是要面对要来的纠纷,一直一直羞于并避免面对这样的情景,这次再无处可躲。突然觉得自己活...
    疲惫的快乐阅读 281评论 0 0
  • 哈哈,这是个玩笑的标题。今天陪同事去交车辆违章罚款,看到了很多人在排队,估计每天都会有很多人吧! 人类永远都是会选...
    06d12fe83199阅读 791评论 0 0
  • 【捭阖第一】(1.5) 捭之者,料其情也;阖之者,结其诚也。皆见其权衡轻重,乃为之度数。圣人因而为之虑,其不中权衡...
    陈力平阅读 292评论 0 0