• 自己实现一个动态数组


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

    线性结构

    线性表是具有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;
        }
  • 相关阅读:
    [BZOJ3745][Coci2015]Norma
    [OJ#15]TR #2 画心
    [BZOJ3585][BZOJ3339]mex
    [OJ#63]树句节够提
    [LOJ#2255][BZOJ5017][Snoi2017]炸弹
    [LOJ#525]「LibreOJ β Round #4」多项式
    【字符编码】Java字符编码详细解答及问题探讨
    【Java基础】序列化与反序列化深入分析
    【目录】JVM目录
    【知识积累】随机数生成的几种方法
  • 原文地址:https://www.cnblogs.com/WellLin/p/12651954.html
Copyright © 2020-2023  润新知