數組的建立及使用

數組是具備相同數據類型的一組數據的集合,做爲對象容許使用new關鍵字進行內存分配。首先先來熟悉一下一維數組的建立和使用。java

聲明一維數組,有下列兩種方式:算法

數組元素類型 數組名字[];數組

數組元素類型[] 數組名字;學習

數組元素類型據定了數組的數據類型,它能夠是java中任意的數據類型,聲明一維數組,如:int arr[];  String str[]; int arr[]是聲明int型數組,數組中的每一個元素都是int型數值,同理,str[]數組中的每一個元素都是String類型。this

注:Java語言中聲明數組時不能指定其長度(數組中元素的個數),這是由於數組是一種引用類型的變量,所以使用它定義一個變量時,僅僅表示定義了一個引用變量(也就是定一個了一個指針),這個引用變量還未指向任何有效的內存,因此定義數組時不能指定數組的長度。並且因爲定義數組僅僅只是定一個引用變量,並未指向任何有效的內存空間,因此尚未內存空間來存儲數組元素,所以這個數組也不能使用,只有在數組進行初始化後才能夠使用。spa

爲數組分配內存空間的語法格式以下:指針

數組名字=new 數組元素的類型[數組元素的個數];例如,arr=new int[5];也能夠在聲明數組的同時爲數組分配內存,例如:int arr[]=new int[5];code

附:一旦使用new關鍵字爲數組分配了內存空間,每一個內存空間存儲的內容就是數組元素的值,也就是數組元素就有了初始值,即便這個內存空間存儲的內容是空,這個空也是一個值null。也就是說不可能只分配內容空間而不賦初始值,即便本身在建立數組對象(分配內容空間)時沒有指定初始值,系統也會自動爲其分配。對象

附:諸如基礎數據類型的包裝類,其默認的初始化值均爲null,由於基礎數據類型的包裝類建立的數組屬於引用數組(對象數組),對象數組默認的初始化值都是null。排序

理解了一維數組的聲明和建立,二維數組的聲明和建立大同小異。二維數組的聲明,int arr[][];二維數組經常使用於表示表,第一個下標表示行,第二個下標表示列。直接爲二維數組分配內存,方法以下:a=new int[2][4];

爲數組分配內存以後,就要學習如何初始化數組了。一維數組的初始化形式有兩種:

int arr[]=new int[]{1,2,3,4};      或    int arr[]={1,2,3,4};

二維數組的初試化方法: int myarr[][]={{12,2},{43,45}}; 注意,寫成intmyarr[][]={12,2,43,45}是錯誤的。

接下來,經過兩段小的代碼來解釋如何使用一維數組和二維數組。

第一個例子是使用一維數組將1~12月各月的天數輸出。代碼以下:

public class shuZu{
 public static void main(String[] args){
   int day[]=new int[]{31,28,31,30,31,30,31,31,30,31,30,31};
   for (int i=0;i<12;i++){
     System.out.println((i+1)+"月有"+ day[i]+"天");
     }    
   }
 }

第二個例子是使用二維數組將數組中的元素輸出。代碼以下:

public class shuZu{
public static void main(String args[]){
 int arr[][]=new int[][]{{1},{2,3},{4,5,6}};
 for(int i=0;i<arr.length;i++){
   for(int j=0;j<arr[i].length;j++){
     System.out.print(arr[i][j]);
     }
     System.out.println();
   }
 }
 }

簡單介紹了一下數組的基本內容,接下來說解一下經典的數組冒泡排序算法。

冒泡排序原理:相鄰的兩位數作比較,1和2比較 2和3比較 3和4比較 4和5比較,這樣依次比較,若是前面的數小於後面的,不作操做,若是前面的數大於後面的數則調換兩個數字的位置,列1>2 則數字順序爲2 1(注:此時的1 2 3 4 5表明索引而不是數組),因此一層循環能挑出一個當前數組參與比較數字中的最大的數字,並將其排到數組的最末尾。 
可是一層循環根本不夠用,只能挑選出一個最大數,數組中其餘的數字尚未正確排序。 
這裏遵循一個原理就是數組裏面有length個數字,要進行length-1次循環。至於爲何要this.length-i,是由於第一次比較7個數字,第二個只要比較前6個就好了,第7個確定是最大的了。這裏要着重強調爲何會有2個for循環,爲何要用this.length-i。

下面用一個列子來作詳細的說明:

var array = [8,7,9,2,3,5,6,1];
var temp = 0;
function sort(arr){
   for (var i = 0; i < arr.length; i++){//這裏的i控制循環比較的次數
     for (var j = 0; j < arr.length - i; j++){
     //這裏的j控制參與比較的數字個數,由於每比較一次都會產生一個最大的數字,那麼下次比較的時候就不必參與比較了,因此每比較一次都會減小一個數字
        if (arr[j] > arr[j + 1]){
         temp = arr[j + 1];
         arr[j + 1] = arr[j];
         arr[j] = temp;
     }
   }
 }
}
console.log('before: ' + array);//輸出[8,7,9,2,3,5,6,1]
sort(array);
console.log(' after: ' + array);//輸出[1,2,3,5,6,7,8,9]
相關文章
相關標籤/搜索