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

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動態數組就能夠動態的擴展存儲元素的個數,其餘的暫時不須要了解。

相關文章
相關標籤/搜索