自己实现一个动态数组

数据结构是计算机存储、组织数据的方式。

线性结构

线性表是具有n个相同类型元素的有限序列(n>=0)

 

常见的线性表有

数组

链表

队列

哈希表

手动实现一个动态数组:GitHub链接:https://github.com/iosKey/ArrayList

核心代码:

1         //数组使用,可以添加任何类型
2         ArrayList<Object> list3  = new ArrayList<>();
3         list3.add(10);
4         list3.add(new Person(12, "Jack"));        
    /**
     * 在index位置插入一个元素
     * @param index
     * @param element
     * 
     * **/
    public void add(int index,E element) {
        //判断size是否合法
        rangeCheckForAdd(index);
        //数组扩容
        ensureCapacity(size + 1);
        //如果插入的下标是2 那么4 3 2就要往后移
//        for (int i = size - 1; i >= index; i--) {
//            elements[i + 1] = elements[i]; 
//        }
        //第二种写法 如果插入的下标是2 那么5 4 3往后移
        for (int i = size; i > index; i--) {
            elements[i] = elements[i - 1]; 
        }
        elements[index] = element;
        size++;
    }
/**
     * 查看元素的索引
     * @param element
     * @return
     * 
     * **/
    public int indexOf(E element) {
        //既然数组能存null 就要进行非null判断 不然用null调用equals方法会报错
        if(element == null) {
            //返回第一个null的下标
            for (int i = 0; i < size; i++) {
                if (elements[i] == null) {
                    return i;
                }
            }
        }else {
            for (int i = 0; i < size; i++) {
                //对象之间对比 Person类重写equals方法
                //Integer默认重写了equals方法 是比较值的结果
                if (element.equals(elements[i])) {
                    return i;
                }
            }
        }
        return ELEMENT_NOT_FOUND;
    }
     * 删除index位置的元素
     * @param index
     * @return
     * 
     * **/
    public E remove(int index) {
        rangeCheck(index);
        E old = elements[index];
        //例如要删除下标3 size是7 要移动的范围就是4-6
        //范围是index后一位到size-1的数都往前移一格
        //删除是小的下标先移动
        for (int i = index + 1; i < size; i++) {
            //要插入的范围是3到5
            elements[i - 1] = elements[i];
        }
        size--;
        //清空最后一个 清空6
        elements[size] = null;
        return old;
    }

 

posted @ 2020-04-07 10:42  Justin_mr  阅读(378)  评论(0编辑  收藏  举报