數據結構和算法(Java版)快速學習(數組Array)


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動態數組就可以動態的擴展存儲元素的個數,其他的暫時不需要了解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM