樂字節(jié)2020最新java13編程基礎(chǔ)之數(shù)組深入

java13編程基礎(chǔ)之數(shù)組深入

大綱

一維數(shù)組

概述

數(shù)組是相同類型數(shù)據(jù)的有序集合。數(shù)組描述的是相同類型的若干個數(shù)據(jù),按照一定的先后次序排列組合而成。其中,每一個數(shù)據(jù)稱作一個元素,每個元素可以通過一個索引(下標)來訪問它們。

這些按序排列的同類數(shù)據(jù)元素的集合稱為數(shù)組“[]”。

特點

  • 定長

長度一旦確定不可以改變。

  • 相同數(shù)據(jù)類型

其元素必須是 相同 類型,不允許出現(xiàn)混合類型。數(shù)組中的元素可以是任何數(shù)據(jù)類型,包括基本類型和引用類型。

  • 位置有序

元素所在的位置是有序的。

  • 數(shù)組本身屬于引用類型

數(shù)組變量屬引用類型,數(shù)組也可以看成是對象,數(shù)組中的每個元素相當于該對象的成員變量。數(shù)組本身就是對象Java 中對象是在堆中的,因此數(shù)組無論保存基本類型還是其他對象類型,數(shù)組對象本身是在堆中的。

  • 數(shù)組中可以存儲任意類型的數(shù)據(jù)

定義

數(shù)組聲明格式

數(shù)據(jù)類型[] 數(shù)組名稱;  --推薦使用
數(shù)據(jù)類型 數(shù)組名稱[];
double[] arr;
char  arr2[];

注意 : 引用數(shù)據(jù)類型只聲明不賦值存在默認值null

數(shù)組初始化

動態(tài)初始化

數(shù)組定義與為數(shù)組元素分配空間和賦值的操作分開進行

數(shù)據(jù)類型[] 數(shù)組名=new 數(shù)據(jù)類型[長度];
int[] data = new int[5];

注意:元素為引用數(shù)據(jù)類型的數(shù)組中的每一個元素都需要實例化。

Person[] people;            //聲明說組
people = new Person[3];     //創(chuàng)建數(shù)組
people[0] = new Person();   //數(shù)組中元素實例化
people[1] = new Person();
people[2] = new Person();

靜態(tài)初始化

在定義數(shù)組的同時就為數(shù)組元素分配空間并賦值

數(shù)據(jù)類型[] 數(shù)組名=new 數(shù)據(jù)類型[]{值1,值2...}; 
數(shù)據(jù)類型[] 數(shù)組名={值1,值2...};              --當面的簡寫方式
int[] arr=new int[]{1,3,4,6};
int[] arr2={1,2,3,4,5};

注意:
對于返回值類型為數(shù)組類型的方法來說,我們可以return new int[3];,我們也可以return new int[]{1, 2, 3};,但我們不可以return {1, 2, 3};。即簡寫方式,其不能脫離數(shù)組的聲明,{1, 2, 3}并不能返回一個數(shù)組對象。

一維數(shù)組對象演示圖

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-fznINj1S-1606962908310)(/1581389339459.png)]

數(shù)組的默認值

數(shù)組中的元素只聲明不賦值存在默認值,數(shù)組是引用類型,它的元素相當于類的成員變量,因此數(shù)組分配空間后,每個元素也被按照成員變量的規(guī)則被隱式初始化。

一般規(guī)律為數(shù)值型數(shù)組默認值為 0,引用型數(shù)組默認值為 null

數(shù)組類型 默認初始值
byte 0
short 0
int 0
long 0
char 編碼為0的字符
String(引用類型) null
float 0.0
double 0.0
boolean false

使用

數(shù)組元素的界限

定義并用 new 為之分配空間之后,才可以引用數(shù)組中的每個元素,數(shù)組元素的引用方式為:

arrayName[index];

index為數(shù)組元素下標|索引,可以是整型常量或整型表達式 , 可以根據(jù)數(shù)組元素的下標操作數(shù)組中數(shù)據(jù)。如:

arr1[3] = 5;                //為數(shù)組索引為0的空間位置賦值
arr2[0] = "張三";            //為數(shù)組索引為0的空間位置賦值
System.out.println(arr3[2]);//獲取數(shù)組中索引為2的數(shù)據(jù)值

數(shù)組元素下標從0開始;長度為n的數(shù)組的合法下標取值范圍為

0~n-1

每個數(shù)組都有一個屬性length指明它的長度

a.length的值為數(shù)組a的長度(元素的個數(shù)

數(shù)組元素遍歷方式

(1)普通for循環(huán)

for(int 索引=0;索引<長度; 索引++){
    數(shù)組名稱[索引] = 值;
}
int[] arr={1,2,3,4};
//1.遍歷數(shù)組---基本for循環(huán)
for(int i=0;i<arr.length;i++){
    //變量i代表索引/元素的下標
    System.out.println(arr[i]);
}

(2)增強for循環(huán)

for(元素類型  局部變量 : 數(shù)組){
    局部變量-->為數(shù)組中的每一個元素值,從左向右以此獲取
}
//2.遍歷數(shù)組---增強for循環(huán)
for(int i : arr){
    System.out.println(i); //i中存儲數(shù)組的元素值,非索引
}

數(shù)組基本練習(xí)

//A:遍歷int類型的數(shù)組 依次輸出每個數(shù)組元素
public static void printArray(int[] arr){
    //循環(huán)遍歷數(shù)組下標
    for(int i=0;i<arr.length;i++){
        System.out.println("輸出int類型數(shù)組的每一個元素"+arr[i]);
    }
}
//B:逆序:倒敘輸出數(shù)組元素
public static void printArr(String[] arr){
    for(int i=arr.length-1;i>=0;i--){
        System.out.println(arr[i]);
    }
}
//C:最值:獲取數(shù)組中的最大值和最小值
public static void maxMinValue(int[] arr){
    //假設(shè)數(shù)組中的第一個元素當成最大值
    int max=arr[0];
    //假設(shè)數(shù)組中的第一個元素當成最大值
    int min=arr[0];
    //遍歷數(shù)組
    for(int i=0;i<arr.length;i++){
        //比較數(shù)組元素與max
        if(max<arr[i]){
            max=arr[i];
        }
        //比較數(shù)組元素與min
        if(min>arr[i]){
            min=arr[i];
        }
        System.out.println("數(shù)組中最大的值為max"+max);
        System.out.println("數(shù)組中最小的值為min"+min);
    }
}

Arrays

該類提供了關(guān)于數(shù)組操作的API.

如何查看API

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-KAXglmlj-1606962908317)(/1581394901601.png)]

Arrays中常用方法

  • 打印數(shù)組----toString方法。
  • 比較兩個數(shù)組是否相同----equals方法。
  • 數(shù)組排序----sort方法。
  • 數(shù)組查找----binarySearch 方法。
  • 數(shù)組拷貝----copyOf方法。
  • 數(shù)組拷貝----copyOfRange方法。
String[] arr1={"hello","shsxt"};
String[] arr2={"hello","shsxt"};
System.out.println(arr1.equals(arr2));  //false
//1.Arrays.equals() 先判斷兩個數(shù)組的length是否相等,如果相等,再比內(nèi)容,如果不相等,直接返回false
System.out.println(Arrays.equals(arr1, arr2));
//2.Arrays.toString 字符串形式打印數(shù)組信息
System.out.println(Arrays.toString(arr1)); 

//3.Arrays.sort()  升序
int[] arr3={12,7,0,6,-32};
Arrays.sort(arr3); //-32 0 6 7 12 
String[] arr4={"ab","a","bc","abc"};  //根據(jù)Unicode表中的值
Arrays.sort(arr4); //a ab abc bc 

//4.Arrays.binarySearch( 數(shù)組, 元素) ) :二分法查找 查找元素在數(shù)組中出現(xiàn)的索引
//前提:先升序排序,才能二分法查找
//找到返回索引,找不到返回-(插入點)-1
Arrays.sort(arr3); 
System.out.println(Arrays.binarySearch( arr3, 16)); // -6

經(jīng)典案例實現(xiàn)-點名器

運行代碼,隨機打印班級同學(xué)名字

//1.數(shù)組存儲姓名,用String數(shù)據(jù)類型
String[] names={"杰克","戴維瓊斯","伊麗莎白","愛麗絲"};  
//2.遍歷數(shù)組,打印出所有姓名
for(int i=0;i<names.length;i++){
    System.out.println(names[i]);
}   
//3.隨機出一個人名
//利用隨機數(shù),生成一個證書,作為索引,到數(shù)組中查找對應(yīng)的元素
Random ran=new Random();
//隨機數(shù)的范圍是[0,names.length-1]
int index=ran.nextInt(names.length); //括號中填寫的最大數(shù)是獲取不到的,因為nextInt獲取的范圍是左閉右開區(qū)間
System.out.println(names[index]);

二維數(shù)組

二維數(shù)組可以看成以數(shù)組為元素的數(shù)組。

其實多維數(shù)組不僅僅只有二維數(shù)組,還有三維數(shù)組,四維數(shù)組..., 但是三維以上很少見到,所以大家重點了解二維數(shù)組即可。

舉例

int [][] a = {{1,2},{3,4,0,9},{5,6,7}};

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-KMk5ckSA-1606962908322)(/1581392542509.png)]

初始化

動態(tài)初始化

數(shù)組定義與為數(shù)組元素分配空間和賦值的操作分開進行

數(shù)據(jù)類型[][] 數(shù)組名 = new 數(shù)據(jù)類型[一維][二維];

注意:這種初始化方式,每一個內(nèi)層的二位數(shù)組長度相同

int[][] a=new int[3][2];
a[0][0] = 1;
a[0][1] = 2;

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-T2WKnLOE-1606962908325)(/1581393583651.png)]

數(shù)據(jù)類型[][] 數(shù)組名 = new 數(shù)據(jù)類型[一維][];
內(nèi)層數(shù)組需要我們自己去創(chuàng)建(下面可以用一維數(shù)組的創(chuàng)建方式)
數(shù)組名[一維數(shù)組索引值] = new 數(shù)據(jù)類型[二維];
int[][] a=new int[3][];
arr[0]=new int[2];
arr[1]=new int[]{3,4,5,6};
arr[2]=new int[]{7,8,9};
arr[0][0] = 1;
arr[0][1] = 2;

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Z3A7nO8h-1606962908328)(/1581394324396.png)]

靜態(tài)初始化

在定義數(shù)組的同時就為數(shù)組元素分配空間并賦值

數(shù)據(jù)類型[][] 數(shù)組名 = new 數(shù)據(jù)類型[][]{{...},{...},{...}};
數(shù)據(jù)類型[][] 數(shù)組名 = {{...},{...},{...}};                 --簡化寫法
int[][] arr1=new int[][]{{5,4,8},{3,8},{1}};
char[][] arr2={{'a'},{'b','c'}};

遍歷方式

雙重循環(huán)實現(xiàn)多維數(shù)組的遍歷

//普通for循環(huán)嵌套增強for循環(huán)
for(int i=0;i<=arr1.length-1;i++){
    for(int j:arr1[i]){
        System.out.println(j);
    }
}
//增強 for循環(huán)嵌套普通for循環(huán)
for(int[] arr:arr1){
    for(int i=0;i<=arr.length-1;i++){
        System.out.println(arr[i]);
    }
}
//普通for嵌套普通for循環(huán)
...
//增強for嵌套增強for循環(huán)
...

Arrays中提供操作多維數(shù)組的方法:

static boolean deepEquals(Object[] a1, Object[] a2) 如果兩個指定的數(shù)組彼此 深度相等 ,則返回 true 。  
static String deepToString(Object[] a) 返回指定數(shù)組的“深度內(nèi)容”的字符串表示形式。  
double[][] arr1= new double[][] {{1.0,2.0},{3.0,4.0,5.0},{6.0}};
double[][] arr2= new double[][] {{1.0,2.0},{3.0,4.0,5.0},{6.0}};
System.out.println(Arrays.deepToString(arr1)); //[[1.0, 2.0], [3.0, 4.0, 5.0], [6.0]]
System.out.println(Arrays.deepEquals(arr1, arr2)); //true

bject[] a1, Object[] a2) 如果兩個指定的數(shù)組彼此 深度相等 ,則返回 true 。
static String deepToString(Object[] a) 返回指定數(shù)組的“深度內(nèi)容”的字符串表示形式。


```java
double[][] arr1= new double[][] {{1.0,2.0},{3.0,4.0,5.0},{6.0}};
double[][] arr2= new double[][] {{1.0,2.0},{3.0,4.0,5.0},{6.0}};
System.out.println(Arrays.deepToString(arr1)); //[[1.0, 2.0], [3.0, 4.0, 5.0], [6.0]]
System.out.println(Arrays.deepEquals(arr1, arr2)); //true
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容