zoukankan      html  css  js  c++  java
  • 自己实现数据结构系列一---ArrayList

    1.先上代码:

    public class ArrayList<E> {
    
        private E[] data;
        private int size;
    
        /**
         * 构造方法,初始化容量capacity
         * @param capacity
         */
        public ArrayList(int capacity){
            data = (E[]) new Object[capacity];
            size = 0;
        }
    
        /**
         * 默认的构造方法,默认capacity=10
         */
        public ArrayList(){
            this(10);
        }
    
        /**
         * 获取数组中元素的个数
         * @return
         */
        public int getSize(){
            return size;
        }
    
        /**
         * 获取数组的容量
         * @return
         */
        public int getCapacity(){
            return data.length;
        }
    
        /**
         * 判断数组是否为空
         * @return
         */
        public boolean isEmpty(){
            return size == 0;
        }
    
        /**
         * 在第index位置插入一个新元素
         * @param index
         * @param e
         */
        public void add(int index,E e){
            if(index < 0 || index > size){
                throw new IllegalArgumentException("Add Failed");
            }
            //扩容
            if (size == data.length){
                resize(2*data.length);
            }
            //index后的元素都向后移动一位,注意:先移动后面的
            for (int i = size; i > index;i--){
                data[i+1] = data[i];
            }
            data[index] = e;
            size++;
        }
    
        /**
         * 扩容
         * @param newCapacity
         */
        private void resize(int newCapacity){
            E[] newData = (E[]) new Object[newCapacity];
            for (int i = 0; i < size; i++){
                newData[i] = data[i];
            }
            data = newData;
        }
    
        /**
         * 向所有元素后添加一个新元素
         * @param e
         */
        public void addLast(E e){
            add(size,e);
        }
    
        /**
         * 向所有元素前添加一个新元素
         * @param e
         */
        public void addFirst(E e){
            add(0,e);
        }
    
        /**
         * 获取index索引位置的元素
         * @param index
         * @return
         */
        public E get(int index){
            if(index < 0 || index >= size){
                throw new IllegalArgumentException("Get Failed");
            }
            return data[index];
        }
    
        /**
         * 修改index位置的元素
         * @param index
         * @param e
         */
        public void set(int index,E e){
            if(index < 0 || index >= size){
                throw new IllegalArgumentException("Get Failed");
            }
            data[index] = e;
        }
    
        /**
         * 判断数组中是否有元素e
         * @param e
         * @return
         */
        public boolean contains(E e){
            for (int i = 0; i < size; i++){
                if(data[i].equals(e)){
                    return true;
                }
            }
            return false;
        }
    
        /**
         * 查找元素e在数组中的位置,不存在返回-1
         * @param e
         * @return
         */
        public int find(E e){
            for (int i = 0; i < size; i++){
                if(data[i].equals(e)){
                    return i;
                }
            }
            return -1;
        }
    
        /**
         * 从数组中删除index位置的元素,返回删除的元素
         * @param index
         * @return
         */
        public E remove(int index){
            if(index < 0 || index >= size){
                throw new IllegalArgumentException("remove Failed");
            }
            E ret = data[index];
            //删除后,index后面的元素向前都移动一位,从index+1开始移动
            for (int i = index+1; i < size; i++){
                data[i-1] = data[i];
            }
            size --;
            if(size == data.length/4 && data.length != 0){
                resize(data.length/2);
            }
            return ret;
        }
    
        /**
         * 从数组中删除第一个元素,
         * @return
         */
        public E removeFirst(){
            return remove(0);
        }
    
        /**
         * 从数组中删除最后一个元素
         * @return
         */
        public E removeLast(){
            return remove(size-1);
        }
    
        /**
         * 删除数组中元素e
         * @param e
         */
        public void removeElement(E e){
            int index = find(e);
            if(index != -1){
                remove(index);
            }
        }
    
        @Override
        public String toString() {
            StringBuilder res = new StringBuilder();
            res.append(String.format("Array:size = %d, capacity = %d 
    ",size,data.length));
            res.append('[');
            for (int i = 0; i < size; i++) {
                res.append(data[i]);
                if(i != size-1){
                    res.append(",");
                }
            }
            res.append(']');
            return res.toString();
        }
    }
  • 相关阅读:
    Notes 20180508 : Java基本程序设计结构之关键字与标识符
    Notes 20180507 : Java程序设计之环境搭建与HelloWord
    Notes 20180506 : Java程序设计语言概述
    Knowledge Point 20180506 深究Java的跨平台特性
    Notes 20180505 : 计算机的基础知识
    Notes 20180310 : String第二讲_String的声明与创建
    Notes 20180309 : String第一讲_char的可读序列
    chrome 調試 node 代碼
    mongoose 5.0 链接数据库 代码保存
    koa-compose 类库学习
  • 原文地址:https://www.cnblogs.com/inspred/p/arraylist.html
Copyright © 2011-2022 走看看