Java基礎學習(二)

數組

數組在Java語言中屬於第一級對象。數組中的每個元素通過數組名加下標進行引用(訪問)。當建立一個數組後,就不能輕易改變其大小。對於數組的訪問不能越界訪問。

1、一維數組

數組聲明

類型名稱 數組名[]; 或者 數據類型 [] 數組名;
int Array[]; or int[] Array;

爲數組元素分配內存單元

數組名=new 類型[類型長度]
Array=new int[5];

數組初始化

在說明數組的同時進行初始化
int Array[]={2,3,4};

在聲明之後再創建數組,然後爲每個元素賦值

注意

Java系統能自動檢查數組下標越界的情況
Java中的數組實際上是一種隱含的“數組類”
Java中任何數組都有公有變量length。

2、二維數組

數組聲明

數組類型 數組名 [][];或者 數組類型[] 數組名 [];
int Array[][];
int[] Array[];

爲元素分配內存空間

直接爲每一維分配空間:int a[][]=new int[3][3];

從最高維開始,分別爲每一維分配空間
int a[][]=new int[3][];
a[0]=new int [3];
a[1]=new int [5];
a[2]=new int [2];

數組是第一級對象

數組可以分爲對象數組和基本類型數組,對象數組保存的是對象的引用,而基本類型數組直接保存基本類型的數值。

新生成一個對象數組時,其中所有的引用被自動初始化爲null;所以在程序中檢查其中的引用是否爲null即可知道數組的某個位置是否存在對象;同樣基本類型的數組如果是數值型的,就被自動初始化爲0,如果是字符型(char)的,就被自動初始化爲(char)O;如果是布爾型(boolean),就被自動初始化爲false。

在Java中,你寫的方法可以返回一個數組,而無需擔心要爲數組負責——只要你需要它,它就會一直存在,當你使用完後,垃圾回收器會清理掉它。

Array.deepToString()

Java SE5中的Array.deepToString()方法,可以將多維數組轉換爲多個String。

import java.util.*;
public class TestForJava {
    public static void main(String[] atgs){
        int [][]array=new int[4][];
        for(int i=0;i<array.length;i++){
            array[i]=new int[5];
        }
        System.out.println(Arrays.deepToString(array));
    }

}
運行結果
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

Arrays實用功能

java.util類庫中的Arrays類,有一套用於數組的static實用方法,其中有6個基本方法:

  • equals():用於比較兩個數組是否相等(deepEquals()用於多維數組)。
//數組相等的條件是元素個數必須相等,並且對等位置上的元素也要相同
//可以通過對每一個元素使用equals()作比較來判斷。
//對於基本類型,需要使用基本類型的包裝器類的equals()方法。
import java.util.*;
public class TestForJava {
    public static void main(String[] atgs){
        int []i=new int[7];
        int []j=new int[7];
        int []k=new int[8];
        Arrays.fill(i, 22);
        Arrays.fill(j, 33);
        Arrays.fill(k, 22);
        System.out.println("i="+Arrays.toString(i));
        System.out.println("j="+Arrays.toString(j));
        System.out.println("i  j:"+Arrays.equals(i, j));

        Arrays.fill(j, 22);
        System.out.println("i="+Arrays.toString(i));
        System.out.println("j="+Arrays.toString(j));
        System.out.println("i  j:"+Arrays.equals(i, j));

        System.out.println("i="+Arrays.toString(i));
        System.out.println("k="+Arrays.toString(k));
        System.out.println("i  k:"+Arrays.equals(i, k));
    }
}
運行結果:
i=[22, 22, 22, 22, 22, 22, 22]
j=[33, 33, 33, 33, 33, 33, 33]
i  j:false
i=[22, 22, 22, 22, 22, 22, 22]
j=[22, 22, 22, 22, 22, 22, 22]
i  j:true
i=[22, 22, 22, 22, 22, 22, 22]
k=[22, 22, 22, 22, 22, 22, 22, 22]
i  k:false
  • fill():用來以同一個值來填充數組,或者填充數組的某個區域,針對對象而言就是複製同一個引用來填充。
  • sort():用於對數組的排序。

  • binarySearch():用於在已經排序的數組中查找元素。

  • toString():產生數組的String表示。

  • hashCode():產生數組的散列碼

    這些方法對各種基本數據類型和Object類而重載過

  • 另外Java標準類庫提供的static方法System.arraycopy(),用它複製數組比用for循環複製要快很多,System.arraycopy()針對所有的類型都做過重載。

    arraycopy()需要的參數有:源數組,表示從源數組中的什麼位置開始複製的偏移量,表示從目標數組的什麼位置開始複製的偏移量,以及需要複製的元素個數。

    需要注意的是基本數據類型和對象數組都可以複製,但是在複製對象數組的時候,只是複製了對象的引用——而不是對象本身的拷貝,也就是淺複製。
    System.arraycopy()不會執行自動包裝和自動拆包,兩個數組必須具有相同的確切類型。

    //System.arraycopy()使用示例
    import java.util.*;
    public class TestForJava {
    public static void main(String[] atgs){
        int []i=new int[7];
        int []j=new int[10];
    
        Arrays.fill(i, 22);
        Arrays.fill(j, 33);
    
        System.out.println("i="+Arrays.toString(i));
        System.out.println("j="+Arrays.toString(j));
    
        System.arraycopy(i, 0, j, 0, i.length);
        System.out.println("j="+Arrays.toString(j));    
    }
    }
    運行結果:
    i=[22, 22, 22, 22, 22, 22, 22]
    j=[33, 33, 33, 33, 33, 33, 33, 33, 33, 33]
    j=[22, 22, 22, 22, 22, 22, 22, 33, 33, 33]
發佈了21 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章