java學習筆記(基礎篇)—java數組

一:什麼是數組,何時使用數組?

  1. 數組是用來保存一組數據類型相同的元素的有序集合,數組中的每一個數據稱爲元素。有序集合能夠按照順序或者下標取數組中的元素。
  2. 在Java中,數組也是Java對象。數組中的元素能夠是任意類型(包括基本類型和引用類),但同一個數組裏只能存放類型相同的元素。

二:何時用數組?

  1. 保存一堆數據類型相同的數據的時候。
  2. 數據要求有順序。

三:數組和鏈表的區別

  1. 在內存開闢難易程度上?
    數組內存分配必須是一塊連續的內存空間。
    鏈表內存分配不必定是連續的內存空間。
  2. 在項目中如何選擇?
    項目重點在數據的增刪改,選擇鏈表。不須要數據的大量搬移
    項目重點在數據的查詢,選擇數組,檢索效率很是高。

四:建立數組大體包括以下步驟:

  1. 聲明一個數組類型的引用變量,簡稱爲數組變量;java

  2. 用new語句構造數組的實例。new語句爲數組分配內存,而且爲數組中的每一個元素賦予默認值;數組

  3. 初始化,即爲數組的每一個元素設置合適的初始值。code

    1.  a)數組變量的聲明;
           1) 一個存放同一類型數據的集合
                  a. 便可以是基本類型,也能夠是對象類型;
                  b. 數組中的每一個數據爲元素;
           2) 數組是一個對象,成員是數組長度和數組中的元素;
           3) 申明瞭一個數組變量並非建立了一個對象;
           4) 申明數組的方式;
             int[] IArray 或者 int IArray[] 基本數據類型數組,數組中存放的是基本數據類型。
            Teacher[] tArray 或者 Teacher tArray[]類數組,
    數組中存放的是Teacher類建立的若干個的對象。
    
            注意:1) 聲明數組變量的時侯,不能指定數組的長度,如下聲明方式是非法的。
                    int x[1];
                    int[2] x;
        b)初始化數組
           初始化:自變量建立後首次賦值的過程;
             建立數組對象;數組對象和其餘Java對象同樣,也用new語句建立;
              int[] iArray = new int[2];
              new語句執行如下步驟:
              a. 在堆區中爲數組分配內存空間,以上代碼建立了一個包含2個元素的int數組;
                 每一個元素都是int類型,佔4個字節,所以整個數組對象在內存中佔用8個字節。
              b. 爲數組中的每一個元素賦予其數據類型的默認值。
                 byte/short/int/long   0
                 float                  0.0f
                 double                    0.0d
                 String                     null
                 char                       '\u0000'
                 boolean                 false
              c. 返回數組對象的引用
        c)初始化數組對象;       
              數組中的每一個元素都有一個索引,或者稱爲下標。
              數組中的第一個元素的索引爲0,第二個元素的索引爲1, 依次類推。
              經過索引能夠訪問數組中的元素或者給數組中元素內容賦值。
              1) 聲明、建立、初始化分開: 
                 int[] iArray;
                 iArray = new int[2];
                 iArray[0] = 0;
                 iArray[1] = 1; 
              2) 聲明、建立的同時並初始化數組;
                 int[] iArray = {0, 1};
                 Student sArray[] = new Student[] { 
                         new Student(「George」, 「Male」, 20), new Student()};
                 Student[] stArray = { new Student(), new Student()} ;
    
      注意:a. 非法的數組初始化方式:
           int[] x = new int[5]{5,4,3,2,1};//編譯出錯,不能在[]中指定數組的長度;
           int[] x;
           x = {5,4,3,2,1}; //{5,4,3,2,1}必須在聲明數組變量的語句中使用,不能單獨使用

五. 數組的邊界:

  1. 一個數組的下標從0開始,數組經過數組的對象引用變量的下標訪問數組。數組中第一個元素的索引爲0, 第二元素的索引爲1,依次類推。若是一個數組長度是5,要訪問最後一個數組元素能夠經過下標4來訪問,若是經過下標5訪問,超出了數組的邊界,在運行時會拋出
    ArrayIndexOutOfBoundsException。
  2. 經過調用數組的length方法能夠得到一個數組的元素個數(數組長度)。 全部Java數組都有一個length屬性,表示數組的長度. 該屬性只能讀取,可是不能修改。

六:二維數組

存放一維數組的數組
   int[][] a = new int[2][3];
   a[0].length;
   a.length;

七:System.arraycopy()

​ 數組的長度一旦定義了,就沒法修改。因此須要arraycopy()來從新分配一個新的 數組(擴容),而後將其內容拷貝進去。對象

int[] a = new int[5];
int[] b = new int[5];
a=b與System.arraycopy(a,0,b,0,5)有什麼區別?
/*
 * @param      src      the source array.
 * @param      srcPos   starting position in the source array.
 * @param      dest     the destination array.
 * @param      destPos  starting position in the destination data.
 * @param      length   the number of array elements to be copied.
*/
public static native void arraycopy(Object src, int srcPos,Object dest, int destPos,int length);

八:可變長參數 ... 參數的個數可變

兩個int相加?
public int add(int a,int b){}
三個int相加?
public int add(int a,int b,int c){}
四個int相加?
public int add(int a,int b,int c,int d){}
五個int相加?
public int add(int a,int b,int c,int d,int e){}
..........
上面的方案代碼很是冗餘。相似的代碼重複寫。
jdk1.5以前的解決方案:經過數組解決的
 public int add(int[] a){
 }

add(new int[]{5,8,9});
add(new int[]{5,8});

缺點:每次都要建立新的數組,
    建立數組須要在堆區開闢連續的內存空間。
    參數調用以後該變量就沒用了,這樣會
    浪費內存空間。
jdk1.5以後的解決方案:經過...解決的
 public int add(int... a){
 }
調用: add(1,4);
         add(1,4,6);
         add(7,6,8,89,76);

注意: 1)可變長參數的使用和數組的使用是同樣。
2)一個方法中只能定義一個可變長參數,而且要定義最後一個參數。索引

歡迎訪問個人騰訊雲+社區:傳送門內存

相關文章
相關標籤/搜索