大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 詳解自定義數組隊列

詳解自定義數組隊列

更新時間:2021-01-04 08:46:27 來源:動力節點 瀏覽1425次

數組作為所有數據結構中存儲和獲取速度最快的一種,憑借其獨特的優勢在數據存儲領域獨領風騷。但是數組也有其自身的局限性,造成了一些不可避免的問題。我們都知道數組的長度必須是固定的,且一旦定義之后就無法動態的更改,這就會造成這樣的問題,如果數組已滿,就無法繼續添加數據。為了解決這個問題,人們想到了自定義數組隊列的方法。

 

試想一下,如果刪除一個數據,它的內存空間空著沒有被使用。另外數組只能存儲同一類型的數據,如果把它設置成Object類型的話,是可以存不同類型的數據了,但是設想這樣一種情況:現在項目中有定義了一個Object類型的數組。項目中擁有很多的圖形類,確實這個數組都能保存,但問題是這時用戶保存了一個其他類型的東西,程序是不會報錯的,因為類型是Object。這樣肯定是不行的。另外在Java中向上轉型是安全的,Object類型可以適應一切類型,但是向下轉型確是不安全的。比如下面的代碼:

package Cbs;

public class Test {

 

public static void main(String[] args) {

//定義Object類型的數組

Object[] array=new Object[10];

//使用基本數據類型的包裝類

Integer i=10;

Float f=12.0f;

//向上轉型,沒有問題

array[0]=i;

array[1]=f;

//向下轉型

int i1=(int)array[0];

//注意array[1]中存儲的是12.0,但是這樣子語法沒有問題,編譯不會出錯

int i2=(int)array[1];

System.out.println(i1);

System.out.println(i2);//拋出ClassCastException異常

}

 

}

 

也就是說,如果使用這樣的數組,在轉型是發生問題是很難發現的。這也是數組的一個局限性。那么既然數組存在這樣的缺陷,我們就要想辦法解決這個問題。該如何解決呢?數組長度當然是無法發生變化的,但是數組名里面存儲的是數組在內存中的首地址這個確是可以改變的。那么是否可以通過地址的改變來動態改變數組的大小呢?答案是肯定的。我們可以聲明一個新的數組,把它的大小增加到我們想要的程度,然后把原數組的值copy到新數組中,再把新數組賦值給原數組,這樣操作就可以使得數組的大小發生動態改變了。這時增加一個數據就讓新數組長度加一,減少一個數據,就讓新數組長度減一就可以了。數組長度的問題就解決了。那么數據類型應該如何解決呢?這就要使用Java的泛型搞定了。泛型Java中并不是一種數據類型,而是一個用于表示類型的符號,常用的泛型表示符號有E、K、Y等。這樣我們在定義類的時候就可以指定泛型,然后在類中使用指定的類型返回和輸入,這樣就不會產生類型的問題了。下面要做的就是定義一個類,用于操作數組,也就是我們要講的自定義數組隊列。

package com.cbs;

 

/**

 * 自定義數組隊列

 * @author CBS

 */

 

public class MyList<E> {//使用泛型E

//聲明一個Object數組

private Object[] array;

private int size=0;//記錄隊列中數據類型的長度

private int initCount=0;//初始化時數組的大小,默認為0

private int incresCount=1;//數組已滿時,每次數組的增長長度

/**

 * 構造方法

 * @param initCount 為數組的初始長度

 */

public MyList(int initCount){

this.initCount=initCount;

array=new Object[initCount];

}

/**

 * 構造方法

 * @param initCount 為數組的初始長度

 * @param incresCount 為數組滿是每次的增長長度

 */

public MyList(int initCount, int incresCount) {

this.initCount = initCount;

this.incresCount = incresCount;

array=new Object[initCount];

}

 

//實現數據的添加

public void add(E e){

if(size<initCount){

array[size]=e;

}

else{

Object[] newArray=new Object[array.length+incresCount];

newArray[size]=e;

for(int i=0;i<array.length;i++){

newArray[i]=array[i];

}

initCount+=incresCount;

array=newArray;

}

size++;

}

//實現刪除指定下標位置的數據

public void delete(int i){

size--;

initCount--;

Object[] newArray=new Object[array.length-1];

for(int j=0;j<i;j++)

newArray[j]=array[j];

for(int j=i+1;j<array.length;j++)

newArray[j-1]=array[j];

array=newArray;

}

//實現插入指定下標位置的數據

public void insert(E e,int i){

if(size<initCount && i>=0 && i<size-1){

for(int j=size;j>i;j--)

array[j]=array[j-1];

array[i]=e;

}

else{

Object[] newArray=new Object[array.length+incresCount];

for(int j=0;j<array.length;j++){

newArray[j]=array[j];

}

initCount+=incresCount;

array=newArray;

for(int j=size;j>i;j--)

array[j]=array[j-1];

array[i]=e;

}

size++;

}

//實現獲取指定下標位置的數據

public E get(int i){

if(i<0 || i>=size)

return null;

else

return (E) array[i];

}

//實現更新指定下標位置的數據

public void upDate(E e,int i){

if(i>=0 && i<size)

array[i]=e;

}

//獲取數組隊列中存儲的元素個數

public int legnth(){

return size;

}

 

}

 

通過上面的代碼,我們完成了一個自定義數組隊列。當然這里對自定義數組隊列做了一定的優化,可以由用戶指定初始的隊列長度和每次隊滿時增長的長度。相比于上面所說的每次長度加一,這樣做就不用每次都新建一個新的數組了。這樣以后只要在類中實例化MyList的對象就可以很方便的操作數組隊列啦。在學習數據結構的過程中我們難免遇到這樣那樣的問題,但是數學領域的學者們總是能想到解決的辦法,我們也是站在了他們的肩膀上才能學到這么多優質的知識。興趣才是我們學習的根本動力,對數據結構感興趣的小伙伴在本站的數據結構和算法教程中還有著許多有趣的數據結構知識等你來學哦。


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 四虎在线免费观看 | 亚洲成年人免费网站 | 看一级大片 | 亚洲精品美女一区二区三区乱码 | 99久久99热久久精品免费看 | 日日摸夜夜添夜夜添毛片 | 69视频在线观看福利视频 | 亚洲日日做天天做日日谢 | 99国产超薄丝袜足j在线观看 | 四虎4hu永久免费国产精品 | 久久亚洲一级毛片 | 日本综合| www.久久视频| 欧美一级毛片在线播放 | 国内视频自拍在线视频 | 国产欧美日韩中文久久 | 国产成人a∨麻豆精品 | 麻豆首页 | 奇米影视在线视频 | 女性一级全黄生活片在线播放 | 国产999在线 | 日日摸天天摸狠狠摸视频 | 爱视频福利网 | 亚洲国产日韩欧美一区二区三区 | 美国毛片免费观看 | 国产精品国产三级国产专区5o | 色偷偷亚洲女人天堂观看欧 | 动漫三级在线观看 | 777色狠狠一区二区三区香蕉 | 中文字幕美日韩在线高清 | 国产在线精品一区二区不卡 | 2020国产精品视频免费 | 伊人成影院九九 | 好吊妞在线成人免费 | 久久综合久久综合九色 | 国产精品免费久久久久影院 | 偷偷操不一样的久久 | 色视频在线观看视频 | 福利视频在线观看午夜 | 亚洲va国产日韩欧美精品色婷婷 | 亚洲综合色吧 |