• 数组队列


    数组队列

    队列

    数组队列?这怎么看都像是两个次放在了一起,组成了一个名词,没错,我们的数组队列就是用我们的数组去实现了我们的队列,数组我们之前已经认识过了,那么啥是队列呢?队列,顾名思义,就是队列,(说了相当于没说),其实就是我们现实生活中常见现象:排队,排队形成的一列,我们都排过队,老实说,我很讨厌排队,特别是排长长的队,所以我一般在人少的时候去。但是排队是必不可少的,它保证了我们的公平:先来的先办完事,后来的后办事。所以我们从这里也就知道了数组队列的基本情况:可以不断地加入数据,没有限制。第二先进先出,后进后出。

    数组队列

    数组队列,在我们认识过队列之后,我们就可以更好的理解数组队列了,也就是用数组来实现队列,我们知道了队列的一个优点,不限人数,想排多少就排多少,所以这也就解决的数组中一个缺点,数组的长度是固定的。我们都明白一个东西一旦固定了,那它也就是死的了,在某些方面,这也不能算是一个缺点,但是在程序中,数组的使用也就失去灵活性,特别是当我们不清楚要存的数据的具体数量时,你说设小一点吧,又不够用,但是设大了吧,有占用我们的内存,所以,这时,我们的数组队列就出场了;总的来说,数组队列增加了灵活性;

    数组队列的实现(java)

    a. 首先是我们去定义一个接口;定义基本的抽象方法:

    ① 增加元素的方法;在固定的位置 ,添加元素的方法;

    ② 删除该数组中一个元素的方法(根据元素进行删除);

    ③ 删除一个位置上面的数据的方法(根据下标进行删除操作);

    ④ 更新数据(同样可以分为更新特点位置的元素,和用新的元素来代替旧元素)当然还要加上获取数组长度,以及获取数值的值的方法,

    ⑤ 总的来说这些方法都是根据自己的实际需要,去定义以及实行的;

    b. 另外我们为了让我们的数组队列可以存储多种类型的数,改变数组只能一种数据的情况;我们给我们的加上了泛型;

     

    c. 第二点就是实现我们上面定义的接口:新建一个class,实现我们的接口,然后重写他的方法;我们来看一下其中的一部分:

    这样我们就可以实例化多个类型的数组队列啦 

    另外我们的java中也提供了数组队列;不想自己定义的话,可以使用java自带;

    /**
     * 自定义数组队列接口;用来解决数组的长度固定缺点;,同时使用<E>表示该接口支持泛型
     *
     */
    public interface MyqueueArray<E> {
             
     
         /**
          * 添加元素
          * @param e为要添加的元素
          */
         public void adddata(E e);
         /**
          *在固定的位置 ,添加元素;
          *@param location为要添加的位置
          * @param e为要添加的元素
          * @return 返回true表示插入成功,返回false表示插入失败
          */
         public boolean adddata(int location,E e);
         /**
          * 移除元素; 
          * @param  location为要移除的元素的位置
          * @return 返回null表示移除成功,否则表示移除失败;
          */
         public E removedata(int location);
         /**
          * 移除元素; 
          * @param e为要移除的元素
          * @return 返回true表示移除成功,否则表示移除失败
          */
         public boolean removedata(E e);
         /**
          * 更新指定位置的元素; 
          * @param location表示要更新的元素的下标
          *  @param e表示要新的元素
          * @return 返回true表示移除成功,否则表示移除失败
          */
         public boolean updata(int location,E e);
         /**
          * 更新指定的元素; 
          * @param old表示要更新的元素
          *  @param e表示要新的元素
          * @return 返回true表示移除成功,否则表示移除失败
          */
         public boolean updata(E old,E a);
            /**
              * 获取数组队列中存储的元素总数
             * @return 返回数组队列中存储的元素总数属性
             */
         public int getlength();
         /**
            * 获取指定索引位置的元素
             * @param location要获取元素的索引位置
             * @return 返回null表示获取失败,否则会返回获取到的元素
             */
         public E getvalue(int location);
         
    
    }
    MyqueueArray
    package 数组队列811;
    
    /**
     * 定义数组队列的实现类,该类实现了 MyqueueArray接口
     * 
     */
    public class MyqueueArrayImpl<E> implements MyqueueArray<E> {
    
        private int size = 0;// 声明一个记录存储元素总数的属性名;
        Object[] Array;// 声明一个数组变量;
    
        public MyqueueArrayImpl(int i) {//重写构造方法;
            Array = new String[i];
            size = i;
        }
    
        /**
         * 添加元素
         * @param a为要添加的元素
         */
        public void adddata(E a) {
            Object[] NewArray = new Object[size + 1];// 新建一个数组;数组长度为size+1;
            NewArray[size] = a;// 把a放到最后的位置;
            for (int i = 0; i < size; i++) {
                NewArray[i] = Array[i];// 把数组Array的数放入NewArray中;
            }
            Array = NewArray;// 把新的数组地址赋给Array;
            size++;// size增加;添加一个数就加1;
    
        }
    
        /**
         * 在固定的位置 ,添加元素;
         * @param location为要添加的位置
         * @param a为要添加的元素
         * @return 返回true表示插入成功,返回false表示插入失败
         */
        public boolean adddata(int location, E a) {
            if (location >= size || location<0) {
                return false;
            } else {
                Object[] NewArray = new Object[size + 1];// 新建一个数组;数组长度为size+1;
                NewArray[location] = a;
                for (int i = 0; i < location; i++) {
                    NewArray[i] = Array[i];// 把数组Array在后面的数放入NewArray中;
                }
                for (int i = location; i < size; i++) {
                    NewArray[location+1] = Array[i];// 把数组Array中在location前面的数放入NewArray中;
                }
                Array = NewArray;// 把新的数组地址赋给Array;
                size++;
                return true;
            }
        }
    
        /**
         * 根据位置移除元素;
         * @param location为要移除的元素的位置
         * @return 返回null表示移除成功,否则表示移除失败;
         */
        @SuppressWarnings("unchecked")
        public E removedata(int location) {
            for (int i = 0; i < size; i++) {
                if (i == location) {
                    Array[location] = null;
                    for (int j = i; j < size - 1; j++) {
                        Array[j] = Array[j + 1];
                    }
                }
            }
            size--;
            return (E) Array[location];
        }
    
        /**
         * 移除元素;
         * 
         * @param a为要移除的元素
         * @return 返回true表示移除成功,否则表示移除失败
         */
        public boolean removedata(E a) {
            for (int i = 0; i < size; i++) {
                if (Array[i] == a) {
                    Array[i] = null;
                    for (int j = i; j < size - 1; j++) {
                        Array[j] = Array[j + 1];
                    }
                    size--;
                }
            }
            return true;
        }
    
        /**
         * 更新指定位置的元素;
         * 
         * @param location表示要更新的元素的位置
         * @param a表示要新的元素
         * @return 返回true表示移除成功,否则表示移除失败
         */
        public boolean updata(int location, E a) {
            if (location < size)
                Array[location] = a;
            return true;
        }
    
        /**
         * 更新指定的元素;
         * 
         * @param old表示要更新的元素
         * @param a表示要新的元素
         * @return 返回true表示移除成功,否则表示移除失败
         */
        public boolean updata(E old, E a) {
            for (int i = 0; i < size; i++) {
                if (Array[i] == old)
                    Array[i] = a;
            }
            return true;
        }
    
        /**
         * 获取数组队列中存储的元素总数
         * 
         * @return 返回数组队列中存储的元素总数属性
         */
        public int getlength() {
    
            return size;
        }
    
        /**
         * 获取指定索引位置的元素
         * 
         * @param location要获取元素的索引位置
         * @return 返回0表示获取失败,否则会返回获取到的元素
         */
        @SuppressWarnings("unchecked")
        public E getvalue(int location) {
    
            if (location < 0 || location >= size)
                return null;
            return (E) Array[location];
        }
    
    }
    MyqueueArrayImpl

     

  • 相关阅读:
    为什么数据库连接很消耗资源 转
    在Eclipse中编写servlet时出现"The import javax.servlet cannot be resolved" 问题解决办法
    multipart/form-data post 方法提交表单,后台获取不到数据
    java 数据库查询Date类型字段 没有了时分秒 全为 00 的解决办法
    Eclipse/myEclipse 代码提示/自动提示/自动完成设置(转)
    PL/SQL破解方法(不需要注册码)
    Java
    tomcat开发环境配置
    文件操作权限
    Java版office文档在线预览
  • 原文地址:https://www.cnblogs.com/hesi/p/5761809.html
Copyright © 2020-2023  润新知