Java數組java
在Java中,數組是用來存放同一種數據類型的集合,注意只能存放同一種數據類型。算法
用類封裝數組實現數據結構數組
數據結構必須具備如下基本功能:數據結構
①、如何插入一條新的數據項blog
②、如何尋找某一特定的數據項排序
③、如何刪除某一特定的數據項索引
④、如何迭代的訪問各個數據項,以便進行顯示或其餘操做內存
而咱們知道了數組的簡單用法,如今用類的思想封裝一個數組,實現上面的四個基本功能:get
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
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動態數組就能夠動態的擴展存儲元素的個數,其餘的暫時不須要了解。