zoukankan      html  css  js  c++  java
  • 用顺序存储(数组)方式来实现列表

    1.添加方法要扩容,数组是没有扩容机制的。

    2.删除方法要重新排元素,将后面的元素向前推。

    package demo1;
    /**
     * 线性表(列表)的接口
     * @author DeepSleeping
     *
     */
    public interface MyList {
    
        /*新增一个元素*/
        void add(Object element);
        /*删除相同元素*/
        void delete(Object element);
        /*根据索引删除元素*/
        void delete(int index);
        /*将指定索引位置的元素替换成新元素*/
        void update(int index,Object newElement);
        /*当前列表中是否含有target这个元素*/
        boolean contains(Object target);
        /*返回指定索引处的元素*/
        Object at(int index);
        /*查找element的索引,如果没有返回-1*/
        int indexOf(Object element);
        
    }
    package demo1;
    
    /**
     * 用顺序存储(数组)方式来实现列表
     * 
     * @author DeepSleeping
     *
     */
    public class MyArrayList implements MyList {
    
        private Object[] elements;// 真正存储元素的底层结构
        private int size = 0;// 元素的个数
        private int capacity = 10;// 容量
    
        public MyArrayList(int capacity) {
            this.capacity = capacity;
            elements = new Object[capacity];
        }
    
        @Override
        public String toString() {
            StringBuilder sb = new StringBuilder("[");
            for (int i = 0; i < size; i++) {
                sb.append(elements[i] + (i == size - 1 ? "" : ","));
            }
            sb.append("]");
            return sb.toString();
        }
    
        public MyArrayList() {
            elements = new Object[capacity];
        }
    
        /**
         * 新增一个元素
         * @param element
         */
        @Override
        public void add(Object element) {
            if (size == capacity) { // 扩容
                capacity *= 2; // 增加一倍的容量
                Object[] newArr = new Object[capacity];// 新建一个数组
                for (int i = 0; i < size; i++) {
                    newArr[i] = elements[i];
                }
                elements = newArr; // 把旧的那个柜子扔掉
            }
            elements[size++] = element;
        }
    
        /**
         * 删除相同元素
         * @param element
         */
        @Override
        public void delete(Object element) {
            int index = indexOf(element);
            if (index >= 0) {
                delete(index);
            }
        }
    
        /**
         * 根据索引删除元素
         * @param index
         */
        @Override
        public void delete(int index) {
            // 前移[紧缩]
            for (int i = index; i < size - 1; i++) {
                elements[i] = elements[i + 1];
            }
            elements[size - 1] = null;
            size -= 1;
        }
    
        /**
         * 将指定索引位置的元素替换成新元素
         * @param index
         * @param newElement
         */
        @Override
        public void update(int index, Object newElement) {
            elements[index] = newElement;
        }
    
        /**
         * 当前列表中是否含有target这个元素
         * @param target
         * @return
         */
        @Override
        public boolean contains(Object target) {
    
            return indexOf(target) >= 0;
        }
    
        /**
         * 返回指定索引处的元素
         * @param index
         * @return
         */
        @Override
        public Object at(int index) {
    
            return elements[index];
        }
    
        /**
         * 查找element的索引,如果没有返回-1 
         * @param element
         * @return
         */
        @Override
        public int indexOf(Object element) {
            for (int i = 0; i < size; i++) {
                if (elements[i].equals(element)) {
                    return i;
                }
            }
            return -1;
        }
    
    }
  • 相关阅读:
    bzoj3531[Sdoi2014]旅行
    bzoj3212 Pku3468 A Simple Problem with Integers 线段树
    bzoj1858[Scoi2010]序列操作 线段树
    bzoj2243[SDOI2011]染色 树链剖分+线段树
    bzoj3038上帝造题的七分钟2
    bzoj1036[ZJOI2008]树的统计Count 树链剖分+线段树
    bzoj3211花神游历各国 线段树
    bzoj4596[Shoi2016]黑暗前的幻想乡 Matrix定理+容斥原理
    bzoj3129[Sdoi2013]方程 exlucas+容斥原理
    刷题总结——寻宝游戏(bzoj3991 dfs序)
  • 原文地址:https://www.cnblogs.com/deepSleeping/p/10260384.html
Copyright © 2011-2022 走看看