數組隊列?這怎麼看都像是兩個次放在了一塊兒,組成了一個名詞,沒錯,咱們的數組隊列就是用咱們的數組去實現了咱們的隊列,數組咱們以前已經認識過了,那麼啥是隊列呢?隊列,顧名思義,就是隊列,(說了至關於沒說),其實就是咱們現實生活中常見現象:排隊,排隊造成的一列,咱們都排過隊,老實說,我很討厭排隊,特別是排長長的隊,因此我通常在人少的時候去。可是排隊是必不可少的,它保證了咱們的公平:先來的先辦完事,後來的後辦事。因此咱們從這裏也就知道了數組隊列的基本狀況:能夠不斷地加入數據,沒有限制。第二先進先出,後進後出。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]; } }