• 数据结构与算法01———手把手教你实现数组(java语言)


    首先规划数组类的成员变量和所拥有的方法以及数组的类型:

      1.数组的类型是int(注:以后会改成泛型,支持各种数据类型)

      2.数组的成员变量包括int型数组和数组的大小

      3.数组的方法包括:构造方法初始化数组的容量;

               判断数组是否为空;

               增:

                   指定位置插入元素

                   插入第一个位置

                   插入最后一个位置

               删:

                   删除位置插入元素

                   删除第一个位置

                   删除最后一个位置

               改:

                   修改指定位置的元素

               查:  查找指定位置的元素

    代码如下:

        

    package Array;
    
    /**
     * @Author: meteor @Date: 2018/7/13 23:41
     * 设计一个普通的数组(非泛型:Int型)
     */
    public class array {
    
        //私有属性
        private int[] data;         //数组
        private int size;           //数组的大小
    
        //构造方法:给一个数组的初始化容量
        public array(int capacity){
            data = new int[capacity];
        }
    
        //把有参数的构造方法封装到无参的构造方法中
        public array(){
            this(10);
            size = 0;
        }
    
        //判断数组是否为空
        public boolean isEmpty(){
            return size == 0;
        }
    
        //数组的大小
        public int getSize(){
            return size;
        }
        //向数组中所有元素后添加元素
        public void addLast(int element){
    
            //可以重用add(index,element)的方法
            add(size,element);
            /*if(size == data.length){
                throw new IllegalArgumentException("addLast fail , array is full");
            }
            data[size] = element;
            size ++;*/
        }
    
        //在所有的元素前加入一个元素
        public void addFirst(int element){
            //重用add(index,element)方法
            add(0,element);
        }
        //给定索引下插入元素
        public void add(int index,int element){
            if(size == data.length){
                throw new IllegalArgumentException("addLast fail , array is full");
            }
    
            if(index < 0){
                throw new IllegalArgumentException("addLast fail , index < 0");
            }
            //从后往前复制
            for(int i = size ;i > index; i--){
                data[i] = data[i-1];
            }
            data[index] = element;
            //维护size的大小
            size++;
        }
    
    
        //查看数组中是否包含该元素:查到返回返回True,查不到返回False
        public boolean contains(int element){
            //遍历数组
            for (int item : data){
                if(data[item] == element)
                    return true;
            }
            return false;
        }
    
        //查找元素所对应的索引:查到返回下标,查不到返回-1
        public int find(int element){
            for (int item : data){
                if(data[item] == element)
                    return item;
            }
            return -1;
        }
    
        //从数组中删除指定的元素,并返回删除的元素
        public int remove(int index){
            if(index <0 || index >= size){
                throw new IllegalArgumentException("get fail , index is illegal");
            }
            int ret = data[index];
            for(int i = index+1;i<size;i++){
                data[i-1] = data[i];
            }
            size --;
    
            return ret;
        }
        /**
         * 从数组中删除第一个元素,并返回删除的元素
         */
        public int removeFirst(){
            return remove(0);
        }
    
        /**
         * 从数组中删除最后一个元素,并返回删除的元素
         * @return
         */
    
        public int removeLast(){
            return remove(size-1);
        }
    
        /**
         * 删除数组中的某个元素
         * @param element
         */
        public void removeElement(int element){
            //先判断元素是否存在
            int index = find(element);
            if(index != -1){
                remove(index);
            }
        }
        //获取对应索引的元素
        int get(int index){
            if(index <0 || index >= size){
                throw new IllegalArgumentException("get fail , index is illegal");
            }
            return data[index];
        }
    
        //改变给定索引对应元素的值
        void set(int index,int element){
            if(index <0 || index >= size){
                throw new IllegalArgumentException("set fail , index is illegal");
            }
            data[index] = element;
        }
    
    
    
    
        //利用StringBuilder来拼接toString的方法
        @Override
        public String toString(){
            StringBuilder s = new StringBuilder();
            s.append(String.format("array: size=%d,capacity=%d
    ",size,data.length));
            s.append("[");
            for(int i=0;i<size;i++){
                s.append(data[i]);
                if(i != size-1)
                    s.append(",");
            }
            s.append("]");
            return s.toString();
        }
    
    }
  • 相关阅读:
    Centos7 搭建FTP服务
    Mitmproxy 安装
    NET Reflector 8 使用
    web sevice 生成代理类及使用
    WCF 动态生成 不用增加引用两种方式
    oracle 表空间、用户名 相关语句
    恢复24小时之内删除的表及表数据
    pl/sql插入报错
    jquer ajax
    pdf增加水印
  • 原文地址:https://www.cnblogs.com/meteorst/p/9311224.html
Copyright © 2020-2023  润新知