Java數組
在Java中,數組是用來存放同一種數據類型的集合,注意只能存放同一種數據類型。
用類封裝數組實現數據結構
數據結構必須具有以下基本功能:
①、如何插入一條新的數據項
②、如何尋找某一特定的數據項
③、如何刪除某一特定的數據項
④、如何迭代的訪問各個數據項,以便進行顯示或其他操作
而我們知道了數組的簡單用法,現在用類的思想封裝一個數組,實現上面的四個基本功能:
class EasyAarray{ //數據結構:簡易數組
private int[] ins; //一維整型數組
private int footer; //數組下標
private int maxLength; //數組最大長度
public EasyAarray(){
footer=0;
maxLength=100;
ins=new int[maxLength]; //無參構造默認初始化100長度的數組
}
public EasyAarray(int length){ //初始化長度為n的數組
footer=0;
maxLength=length;
ins=new int[maxLength];
}
//取得數組的有效長度
//遍歷數組的元素
//添加
//判斷元素是否存在
//根據下標查找元素
//修改元素
//刪除元素
}
具體代碼編寫:
class EasyAarray{ //數據結構:簡易無序數組
private int[] ins; //一維整型數組
private int footer; //數組下標
private int maxLength; //數組最大長度
public EasyAarray(){
footer=0;
maxLength=100;
ins=new int[maxLength]; //無參構造默認初始化100長度的數組
}
public EasyAarray(int length){ //初始化長度為n的數組
footer=0;
maxLength=length;
ins=new int[maxLength];
}
//取得數組的有效長度
public int size(){
return footer;
}
//遍歷數組的元素
public void printAarray(){
for(int i=0;i<footer;i++){
System.out.print(ins[i]+" ");
}
System.out.println();
}
//添加
public boolean add(int n){
if(footer>=maxLength){ //若下標超出最大長度,則添加失敗(不考慮擴容)
return false;
}
ins[footer++]=n;
return true;
}
//判斷元素是否存在
public boolean exist(int n){
for(int i=0;i<=footer;i++){
if(n==ins[i]){
return false;
}
}
return true;
}
//根據下標(索引)查找元素
public int get(int index){
return ins[index];
}
//修改元素(若有重復元素,只修改第一個)
public boolean modify(int oldValue,int newValue){
for(int i=0;i<=footer;i++){
if(oldValue==ins[i]){
ins[i]=newValue;
return false;
}
}
return true;
}
//刪除元素
public boolean del(int index){
if(!exist(index)){ //若元素不存在,返回false
return false;
}
for(int i=index;i<=footer;i++){ //元素依次前移
ins[i]=ins[i+1];
}
footer--; //下標減1
return true;
}
}
public class App {
public static void main(String[] args) {
EasyAarray ea=new EasyAarray(10);
System.out.println(ea.size());
ea.add(4);
ea.add(7);
ea.add(3);
ea.add(1);
ea.add(9);
ea.del(2); //刪除第3個元素(索引是2)
ea.printAarray();
}
}
數組的局限性
通過上面的代碼,我們發現數組是能夠完成一個數據結構具有的所有功能,而且實現起來也不難,但是實際應用中不用它來進行所有的數據存儲。
數組(不考慮排序)的局限性分析:
①、插入快,對於無序數組,上面我們實現的數組就是無序的,即元素沒有按照從大到小或者某個特定的順序排列,只是按照插入的順序排列。無序數組增加一個元素很簡單,只需要在數組末尾添加元素即可,但是有序數組卻不一定了,它需要在指定的位置插入。
②、查找慢,當然如果根據下標來查找是很快的。但是通常我們都是根據元素值來查找,給定一個元素值,對於無序數組,我們需要從數組第一個元素開始遍歷,知道找到那個元素。有序數組通過特定的算法查找的速度會比無需數組快,后面我們會講各種排序算法。
③、刪除慢,根據元素值刪除,我們要先找到該元素所處的位置,然后將元素后面的值整體向前面移動一個位置。也需要比較多的時間。
④、數組一旦創建后,大小就固定了,不能動態擴展數組的元素個數。如果初始化你給一個很大的數組大小,那會白白浪費內存空間,如果給小了,后面數據個數增加了又添加不進去了。
很顯然,數組雖然插入快,但是查找和刪除都比較慢,所以我們不會用數組來存儲所有的數據,那有沒有什么數據結構插入、查找、刪除都很快,而且還能動態擴展存儲個數大小呢,答案是有的,比如ArrayList動態數組就可以動態的擴展存儲元素的個數,其他的暫時不需要了解。
