Java基礎知識---數組

                                                                             Java基礎知識---數組

 今天來學習一下數組。

  數組是什麼??好像是一堆數據的集合。

  在 Java 語言中,提供的數組是用來儲存固定大小的同類型元素。數組中的元素可以是任何類型,包括基本類型和引用類型數據。多維數組:多維數組可以看成是數組的數組,比如二維數組就是一個特殊的一維數組,其每一個元素都是一個一維數組

   那麼怎樣去聲使用數組??

   使用數組之前,首先需要先聲明該數組變量,才能在數組中進行使用。

   要使用 Java 的數組,必須先經過兩個步驟:   

          1)聲明數組變量

          2)創建數組:分配內存給這個數組

    在 Java 中,將數組定義爲引用數據類型。但是聲明方式有兩種:

  • 數組的動態初始化:動態初始化是指由程序員在初始化數組時指定數組的長度,由系統爲數組元素分配初始值。

                數據類型 數組名稱[ ] = new 數據類型[長度 ];

                數據類型[ ] 數組名稱 = new 數據類型[長度 ];

這兩種方式初始化的效果是一樣的,只是 [ ] 放置的位置是不一樣的。

 

  • 數組的靜態初始化 :靜態初始化是指由程序員在初始化數組時爲數組每個元素賦值,由系統決定數組的長度。

                  簡化格式: 數據類型 數組名稱 [ ] ={ 數據1,數據2.....};

                  完整格式: 數據類型 數組名稱[ ] = new 數據類型[ ] {數據1,數據2 };

 

怎樣給數組分配內存??

首先我們先了解一下棧內存,堆內存的概念

 

  • 棧內存:是一種連續儲存的數據結構,存放基本類型的變量,對象的引用變量和方法調用,遵循先入後出的規則。當在一段代碼塊定義一個變量時,Java就在棧中爲這個變量分配內存空間,當超過變量的作用域後,Java會自動釋放掉爲該變量所分配的內存空間,該內存空間可以立即被另作他用。
  • 堆內存:用來存放所有new出來的對象

數據存放在了堆內存中,那麼怎樣訪問堆內存中的每一個數組元素呢?

       數組裏面可以通過腳標對每一個元素進行訪問,腳標從 0 開始定義,所以可以使用的腳標範圍:“0 ~ 數組長度-1”。注意,如果使用的時候超過了數組腳標範圍則會出現 " ArrayIndexOutOfBoundsException (數組越界) "異常。對於數組的長度也可以使用 “ 數組名稱.length” 屬性進行獲得。

使用數組是爲了可以進行方便的變量管理,所以在進行數組操作的時候往往會利用 for 循環控制輸出。

public class ArrayTest {

	public static void main(String[] args) {
		
		int[] a = new int[3] ; 
		
		for(int i = 0 ; i < a.length ; i++) {
			
			System.out.println(a[i]);
		}
	}
}


輸出結果爲:

0
0
0

 

 

說明在動態初始化聲明的時候,數組每一個元素的保存內容爲其對應數據類型的默認值。

數組引用傳遞

數組是引用數據類型,就會發生引用傳遞,出現:一個堆內存可以被多個棧內存所指向。

數組屬於引用類型,所以一定要爲其開闢堆內存空間之後纔可以使用。如果使用了未開闢內存空間的數組則會出現“NullPointException”異常。

數組內存分析:

        從 JDK1.5 之後爲了減輕下標對程序的影響(如果下標處理不當則會出現數組越界),所以參考了.net 中的設計,引入了增強型的 for 循環(foreach),利用 foreach 的語法結構可以之際自動獲取數組中的每一個元素,避免下標訪問。

public class ArrayTest {

	public static void main(String[] args) {
		
		int[] aa = new int[3] ; 
		
		for(int a : aa ) {
			System.out.println(a);
		}
		
		
	}
}

 

        對於引用數據類型而言,主要的特點是可以與方法進行引用傳遞,而數組本身也屬於引用數據類型,所以可以通過方法實現引用傳遞的操作。

class LowHighSwap
{
    static void doIt( int[] z )
    {
        int temp = z[z.length-1];
        z[z.length-1] = z[0];
        z[0] = temp;
    }
}

class TestIt
{
    public static void main( String[] args )
    {
        int[] myArray = {1, 2, 3, 4, 5};
        LowHighSwap.doIt(myArray);
        for (int i = 0; i < myArray.length; i++)
        {
            System.out.print(myArray[i] + " ");
        }
    }
}




輸出結果爲: 5 2 3 4 1

數組作爲參數是引用傳遞 ,在 doIt 方法中可以修改數組的值 。

 

Arrays 類 

java.util.Arrays 類能方便地操作數組,它提供的所有方法都是靜態的。

具有以下功能:

  • 給數組賦值:通過 fill 方法。
  • 對數組排序:通過 sort 方法,按升序。
  • 比較數組:通過 equals 方法比較數組中元素值是否相等。
  • 查找數組元素:通過 binarySearch 方法能對排序好的數組進行二分查找法操作。
1 public static int binarySearch(Object[] a, Object key)
用二分查找算法在給定數組中搜索給定值的對象(Byte,Int,double等)。數組在調用前必須排序好的。如果查找值包含在數組中,則返回搜索鍵的索引;否則返回 (-(插入點) - 1)。
2 public static boolean equals(long[] a, long[] a2)
如果兩個指定的 long 型數組彼此相等,則返回 true。如果兩個數組包含相同數量的元素,並且兩個數組中的所有相應元素對都是相等的,則認爲這兩個數組是相等的。換句話說,如果兩個數組以相同順序包含相同的元素,則兩個數組是相等的。同樣的方法適用於所有的其他基本數據類型(Byte,short,Int等)。
3 public static void fill(int[] a, int val)
將指定的 int 值分配給指定 int 型數組指定範圍中的每個元素。同樣的方法適用於所有的其他基本數據類型(Byte,short,Int等)。
4 public static void sort(Object[] a)
對指定對象數組根據其元素的自然順序進行升序排列。同樣的方法適用於所有的其他基本數據類型(Byte,short,Int等)。

 

Java 中數組擴容的三種方式:

①    int[] arr1=new int[arr1.length*2]   //新數組長度

        for(int i=0;i<arr1.length;i++){     //複製

            arr1[i]=arr1[i];
        }

 ②    int[] arr2=java.util.Arrays.copyOf(原數組名,新數組長度);

 ③    int[] arr3=new int[arr1.length*2]
        System.arraycopy(原數組名,起始下標,新數組名,起始下標,複製長度);
 

一點一點的學習吧,加油,我是站在巨人肩膀的小白菜。。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章