数组队列?这怎么看都像是两个次放在了一块儿,组成了一个名词,没错,咱们的数组队列就是用咱们的数组去实现了咱们的队列,数组咱们以前已经认识过了,那么啥是队列呢?队列,顾名思义,就是队列,(说了至关于没说),其实就是咱们现实生活中常见现象:排队,排队造成的一列,咱们都排过队,老实说,我很讨厌排队,特别是排长长的队,因此我通常在人少的时候去。可是排队是必不可少的,它保证了咱们的公平:先来的先办完事,后来的后办事。因此咱们从这里也就知道了数组队列的基本状况:能够不断地加入数据,没有限制。第二先进先出,后进后出。java
数组队列,在咱们认识过队列以后,咱们就能够更好的理解数组队列了,也就是用数组来实现队列,咱们知道了队列的一个优势,不限人数,想排多少就排多少,因此这也就解决的数组中一个缺点,数组的长度是固定的。咱们都明白一个东西一旦固定了,那它也就是死的了,在某些方面,这也不能算是一个缺点,可是在程序中,数组的使用也就失去灵活性,特别是当咱们不清楚要存的数据的具体数量时,你说设小一点吧,又不够用,可是设大了吧,有占用咱们的内存,因此,这时,咱们的数组队列就出场了;总的来讲,数组队列增长了灵活性;数组
a. 首先是咱们去定义一个接口;定义基本的抽象方法:ide
① 增长元素的方法;在固定的位置 ,添加元素的方法;spa
② 删除该数组中一个元素的方法(根据元素进行删除);3d
③ 删除一个位置上面的数据的方法(根据下标进行删除操做);code
④ 更新数据(一样能够分为更新特色位置的元素,和用新的元素来代替旧元素);固然还要加上获取数组长度,以及获取数值的值的方法,orm
⑤ 总的来讲这些方法都是根据本身的实际须要,去定义以及实行的;blog
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); }
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]; } }