樂字節2020最新java13編程基礎之數組深刻

java13編程基礎之數組深刻

大綱

一維數組

概述

數組是相同類型數據的有序集合。數組描述的是相同類型的若干個數據,按照必定的前後次序排列組合而成。其中,每個數據稱做一個元素,每一個元素能夠經過一個索引(下標)來訪問它們。java

這些按序排列的同類數據元素的集合稱爲數組「[]」。編程

特色

  • 定長

長度一旦肯定不能夠改變。數組

  • 相同數據類型

其元素必須是 相同 類型,不容許出現混合類型。數組中的元素能夠是任何數據類型,包括基本類型和引用類型。dom

  • 位置有序

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

  • 數組自己屬於引用類型

數組變量屬引用類型,數組也能夠當作是對象,數組中的每一個元素至關於該對象的成員變量。數組自己就是對象Java 中對象是在堆中的,所以數組不管保存基本類型仍是其餘對象類型,數組對象自己是在堆中的。code

  • 數組中能夠存儲任意類型的數據

定義

數組聲明格式
數據類型[] 數組名稱;  --推薦使用
數據類型 數組名稱[];
double[] arr;
char  arr2[];

注意 : 引用數據類型只聲明不賦值存在默認值null對象

數組初始化
動態初始化

數組定義與爲數組元素分配空間和賦值的操做分開進行排序

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

注意:元素爲引用數據類型的數組中的每個元素都須要實例化。索引

Person[] people;             //聲明說組
people = new Person[3];        //建立數組
people[0] = new Person();   //數組中元素實例化
people[1] = new Person();
people[2] = new Person();
靜態初始化

在定義數組的同時就爲數組元素分配空間並賦值圖片

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

注意:
對於返回值類型爲數組類型的方法來講,咱們能夠return new int[3];,咱們也能夠return new int[]{1, 2, 3};,但咱們不能夠return {1, 2, 3};。即簡寫方式,其不能脫離數組的聲明,{1, 2, 3}並不能返回一個數組對象。

一維數組對象演示圖

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

數組的默認值

數組中的元素只聲明不賦值存在默認值,數組是引用類型,它的元素至關於類的成員變量,所以數組分配空間後,每一個元素也被按照成員變量的規則被隱式初始化。

通常規律爲數值型數組默認值爲 0,引用型數組默認值爲 null

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

使用

數組元素的界限

定義並用 new 爲之分配空間以後,才能夠引用數組中的每一個元素,數組元素的引用方式爲:

arrayName[index];

index爲數組元素下標|索引,能夠是整型常量或整型表達式 , 能夠根據數組元素的下標操做數組中數據。如:

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

數組元素下標從0開始;長度爲n的數組的合法下標取值範圍爲

0~n-1

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

a.length的值爲數組a的長度(元素的個數

數組元素遍歷方式

(1)普通for循環

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

(2)加強for循環

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

數組基本練習

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

Arrays

該類提供了關於數組操做的API.

如何查看API

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

Arrays中經常使用方法

  • 打印數組----toString方法。
  • 比較兩個數組是否相同----equals方法。
  • 數組排序----sort方法。
  • 數組查找----binarySearch 方法。
  • 數組拷貝----copyOf方法。
  • 數組拷貝----copyOfRange方法。
String[] arr1={"hello","shsxt"};
String[] arr2={"hello","shsxt"};
System.out.println(arr1.equals(arr2));  //false
//1.Arrays.equals() 先判斷兩個數組的length是否相等,若是相等,再比內容,若是不相等,直接返回false
System.out.println(Arrays.equals(arr1, arr2));
//2.Arrays.toString 字符串形式打印數組信息
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"};  //根據Unicode表中的值
Arrays.sort(arr4); //a ab abc bc 

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

經典案例實現-點名器

運行代碼,隨機打印班級同窗名字

//1.數組存儲姓名,用String數據類型
String[] names={"傑克","戴維瓊斯","伊麗莎白","愛麗絲"};    
//2.遍歷數組,打印出全部姓名
for(int i=0;i<names.length;i++){
    System.out.println(names[i]);
}    
//3.隨機出一我的名
//利用隨機數,生成一個證書,做爲索引,到數組中查找對應的元素
Random ran=new Random();
//隨機數的範圍是[0,names.length-1]
int index=ran.nextInt(names.length); //括號中填寫的最大數是獲取不到的,由於nextInt獲取的範圍是左閉右開區間
System.out.println(names[index]);

二維數組

二維數組能夠當作以數組爲元素的數組

其實多維數組不只僅只有二維數組,還有三維數組,四維數組..., 可是三維以上不多見到,因此你們重點了解二維數組便可。

舉例

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

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

初始化

動態初始化

數組定義與爲數組元素分配空間和賦值的操做分開進行

數據類型[][] 數組名 = new 數據類型[一維][二維];

注意:這種初始化方式,每個內層的二位數組長度相同

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

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

數據類型[][] 數組名 = new 數據類型[一維][];
內層數組須要咱們本身去建立(下面能夠用一維數組的建立方式)
數組名[一維數組索引值] = new 數據類型[二維];
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;

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

靜態初始化

在定義數組的同時就爲數組元素分配空間並賦值

數據類型[][] 數組名 = new 數據類型[][]{{...},{...},{...}};
數據類型[][] 數組名 = {{...},{...},{...}};                    --簡化寫法
int[][] arr1=new int[][]{{5,4,8},{3,8},{1}};
char[][] arr2={{'a'},{'b','c'}};
遍歷方式

雙重循環實現多維數組的遍歷

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

Arrays中提供操做多維數組的方法:

static boolean deepEquals(Object[] a1, Object[] a2) 若是兩個指定的數組彼此 深度相等 ,則返回 true 。  
static String deepToString(Object[] a) 返回指定數組的「深度內容」的字符串表示形式。
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) 若是兩個指定的數組彼此 深度相等 ,則返回 true 。
static String deepToString(Object[] a) 返回指定數組的「深度內容」的字符串表示形式。

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

相關文章
相關標籤/搜索