Java中的函數與數組——第十二課

2020-12-13 IT極客學社

數組

問題引入

需求:計算一個班級100人的考試總分;

數組的概念

數組,就是一種容器,它可以保存多個相同類型的數據;而且數組一旦創建,容量不能更改

數組的定義格式

數組使用[] 表示;定義格式是:

數據類型[] 數組名(變量名) = new 數據類型[數組的容量];

int arr[] = new int[10];

int []arr = new int[10];

數組的使用

數組元素的存取&數組的索引

結論:

Java中,數組都具有索引,索引實際上就是數組中每個存儲單元的編號;

向數組中保存數據和取出數據,都是通過索引進行的;

索引的特點是:

從0開始,依次遞增;最大索引就是數組容量減一;

數組的遍歷&數組的length屬性

在每個數組中,都有一個length屬性,表示數組的容量;

使用方式是:

數組名.length;

注意:因為數組一旦創建,容量就固定不變,所以數組的length屬性也不能改變;

如果對數組的操作(賦值或者取值)沒有規律,那麼就不能使用循環來簡化;

數組的內存原理(了解)

java的內存組成

數組的內存圖解

需求1:畫出下面代碼執行的內存圖解:

public static void main(String[] args)

{

int[] array = new int[3];

array[0] = 10;

int a = array[0];

System.out.println(a);

System.out.println(array);

array = null;

System.out.println(array);

}

內存圖解:

需求2:下面的代碼執行結果是什麼?為什麼?

public static void main(String[] args) {

int[] array = new int[3];

int[] arr = array;

array[1] = 100;

System.out.println(arr[1]);//100

arr[1] = 50;

System.out.println(array[1]);//50

}

結論:

如果一個變量中保存的是實際數據本身, 這個變量就是基本類型變量;

如果一個變量是引用類型的變量,變量空間中保存的就一定是一個內存地址(或者是默認值null)

引用傳遞和值傳遞

如果是引用類型的變量,那麼在變量中保存的是堆內存中的空間地址;

如果是引用類型的變量進行賦值,實際傳遞的是保存在變量中的地址,像這種傳遞數據的方式就叫做引用傳遞(傳遞的是內存地址);

如果是基本類型的變量進行賦值,實際傳遞的是保存在變量中的常量值,叫做按值傳遞;

因為值傳遞傳遞的是實際數據,所以不同的基本類型的變量的修改,相互之間沒有影響;

應為引用傳遞傳遞的是堆內存中的引用地址,所以如果不同的變量保存的是相同的引用地址,那麼他們都指向同一塊空間;任何一個變量對空間的修改,都已影響其他變量;

數組使用中的常見問題

NullPointerException

ArrayIndexOutOfBoundsException

當試圖使用不存在的下標(超出範圍的下標)來操作數組的時候,就會出現這個問題;

數組的第二種定義格式

數組定義格式:

數據類型[] 數組名 = new 數據類型[數組容量];

數組名[索引] = 數據;

如果在定義數組時已經知道數組中會保存什麼數據,就可以使用另一種定義方式,在創建數組的同時將數據保存在數組中;

格式:

數據類型[] 數組名 = new 數據類型[]{數據1,數據2,數據3,數據4……數據n};

注意:使用這種方式,不能在中括號中寫數組的容量;

這種定義格式的簡寫形式:

數據類型[] 數組名 = {數據1,數據2,數據3,數據4……數據n};

注意:簡寫只是為了書寫方便,實際上編譯器還是會加上new 這一部分;

注意:使用簡寫形式時,不能將數組變量的聲明和賦值寫成兩行;

數組的練習

數組平均值:

例子:求下列數字的平均值:1.0,2.4,3.5,4.3,5.1,6.8,7.2,8,9,10

數組求最大值

例子:求下列數字的最大值:1.0,2.4,3.5,4.3,5.1,6.8,7.2,8,9,10

將數組中的元素轉為指定格式的字符串

例子:給定數組,返回指定格式的字符串;例如:將數組{1,2,3,4}轉為字符串:"[1,2,3,4]";

將數組中元素倒序(反轉)

例子:數組{1,2,3,4,5}倒序後為{5,4,3,2,1};

數組的查找

數組查找,就是根據給定的數據,查找這個數據在數組中的位置;如果找到了,就返回相應的索引;如果沒有找到,就返回-1;

普通查找

普通查找,就是通過遍歷整個數組,一個一個數據的和要找的數據比較;如果有相同的數據出現,就說明在數組中存在

和要找的數據一樣的數據,就可以直接返回這個數據的索引;

使用普通查找,一般找到的是數據第一次出現的位置;

二分查找

如果數組中的數據是有序的,就可以使用二分查找法快速查找;

有序:就是從小到大或者從大到小有規律的排列;

數組的排序

數組排序的概念

排序:按照一定規律,將數組中的元素從無序變為有序;

升序:就是從小往大、從低到高……

降序:和升序剛好相反

選擇排序

排序的算法:選擇排序,冒泡排序,快速排序,歸併排序;希爾排序;堆排序;插入排序;

在實際開發中,排序都已經寫好了,直接調用JDK中的函數就行;

為了面試,我們掌握一種排序算法就行;

選擇排序的思想,就是不斷在沒有排序的部分數據中,找到最小(或者最大的)數據,移到數組的前面,一直到整個數組全部有序(只剩最後一個數據沒有比較的時候,數組就有序了);

Arrays數組工具介紹

上面介紹了數組的一些練習,而針對數組的常見操作,Java已經提供好了,並書寫在Arrays中。在程序中是可以直接使用的。

public class Demo {

public static void main(String[] args) {

// 定義數組

int[] arr = { 23, 15, 67, 25, 90, 33 };

// 列印數組

System.out.println( Arrays.toString(arr) );

// 數組排序

Arrays.sort(arr);

System.out.println( Arrays.toString(arr) );

}

}

程序運行結果:

二維數組介紹

什麼是二維數組

數組是一種容器,可以保存多個相同類型的數據;

在內存的角度看,數組就是內存中連續在一起的多個存儲空間;

如果一個數組中保存的數據的類型就是數組類型,那麼數組中每個存儲單元中都保存的是一個其他數組的內存地址;

這種數組的數組就叫做二維數組;

二維數組使用演示

二維數組的格式

int[][] arr = new int[2][3];//表示創建一個二維數組;這個二維數組的每一個元素都是一個一維數組;

//上面聲明中的數字2表示聲明的二維數組的長度是2;3表示二維數組中每個一維數組的長度是3;

二維數組的使用

數組使用總結

數組的特點

1、 數組是容器,可以保存相同類型的數據;

2、 數組是容器,都具有容量,通過length屬性獲取;一個數組創建完成之後,容量大小不可改變;

3、 數組中的元素都具有索引,索引是整數,從0開始,連續遞增,最大索引是數組容量減一;

數組使用場景

1、 有多個數據要保存,數據類型一樣;

2、 數據的數量要確定;(如果不確定,就不知道創建多大的數組合適)

如果數據很多,但是數據類型不一樣,或者數據總數也不確定;這個時候就要使用新的容器:集合

以上

相關焦點

  • 一起學JAVA——數組和函數
    之前我們介紹了java的數據類型、變量、流程控制等內容。今天我們高級數據類型——數組以及函數的作用。函數(方法)函數的定義函數就是一段有名字的代碼,可以完成某一特定功能。方法(函數)是java的最小代碼重用單位,方法(函數)是為了重用代碼。方法不能嵌套方法,不能在一個方法內部定義另外一個方法。可以在一個方法內部調用另外一個方法。
  • 零基礎java入門教程java數組常見操作最大值最小值和重載複習例題
    >步驟:1:定義變量,初始化為數組中任意一個元素即可;2:通過循環語句對數組進行遍歷3:在變量過程中定義判斷條件,如果遍歷到的元素比變量中的元素打,就賦值給該變量需要定義一個功能(函數塊)來完成,以便提高復用性
  • PHP數組函數有哪些?
    max()函數定義:max() 函數返回一個數組中的最大值,或者幾個指定值中的最大值。語法:max(array_values); or max(value1,value2,...)語法:mixed next(array array);end()函數定義:end() - 將內部指針指向數組中的最後一個元素,並輸出。語法:mixed end(array array);prev()函數定義:prev() - 將內部指針指向數組中的上一個元素,並輸出。
  • 如何在Java中創建數組列表
    ArrayList的關鍵點An ArrayList是一個可調整大小的數組,也稱為動態數組。它根據新元素增加其大小,並在刪除元素時減小大小。數組用於在ArrayList 內部存儲元素 。它允許您通過索引檢索元素。
  • VBA進階 | 數組基礎06: 與數組相關的函數——Array函數與IsArray函數
    由Array函數返回的數組只可賦值給一個Variant型變量,不能賦值給已聲明為數組變量的變量。Array函數返回的數組中元素的順序與傳遞給函數的參數值的順序相同。Array函數總是返回Variant類型的數組,但元素的數據類型可以不同,這取決於傳遞給該函數的數值類型。
  • Java基礎——數組例題&二維數組
    例題2:也可以在String的第3個值進行修改,因為數組是從0開始所以,str[2]=」java」;例題3:可以申請一個常量數組,並修改裡面的值,不會報錯。Final是一個常量,常量是不可以賦值。在基本數據類型中沒有String字符串是正常的,因為字符串屬於一種合併的一種類型。 其實字符串是拿char數組做出來的,其實就是char類型的組合。Char數組:1.8之前的jdk版本String字符串用的是char類型的數組。1.9以後版本jdk用的是byte類型的數組。
  • 每日一課 | JavaScript中的數組
    JavaScript中的數組具有length屬性,該屬性返回該數組的大小。我們僅初始化數組,並且未在數組中添加任何元素。如何檢索數組中的第一個和最後一個元素?  1)同時聲明和填充數組var array=[10,20,30];console.log(array);2)使用數組構造函數聲明數組:在此方法中,我們使用數組構造函數聲明數組,然後使用索引填充此數組。
  • Java語法 | 多維數組
    // 聲明二維數組// 語法數據類型[][] 數組名 = new 數據類型[外維數組容量][內維數組容量];// 給二維數組賦值// 語法數組名[外維數組下標][內維數組下標] = 元素值;我們結合著二維數組的語法,來初步實現下前言中的需求。
  • 跟我學java編程—Java的二維數組結構可以這樣理解
    前面介紹了一維數組。在實際問題中有些數據信息是二維的或者多維的。多維數組元素有多個下標,以標識它在數組中的位置。本節只介紹二維數組,多維數組可由二維數組類推而得到。數組的元素通過數組下標進行訪問。前面已經講過,在Java語言中,數組下標是從0開始的,所以包含n個元素的數組下標的範圍是0到n-1。例如:前面定義的數組a,其下標範圍為0到4。要訪問a數組的元素,可通過a[0]、a[1]、a[2]、a[3]、a[4]訪問a數組的各個元素,此時,方括號中的數字是數組的下標,表示訪問數組的第幾個元素。
  • 尚學堂知識整理:java數組
    數組是什麼?數組是一個固定長度的數據結構,用於保存多個相同數據類型的值。在數據類型之後或在變量聲明中的變量名稱之後放置[],使變量成為數組。如果要聲明數組,可在上面的聲明中的數據類型之後放置[],如下所示 –創建數組數組創建的一般語法如下:以下代碼創建Arraylength長度類型為ArrayDataType的數組對象
  • MATLAB數組的常用函數
    中的函數表達方式。這些函數在MATLAB中可以同時作用於整個矩陣或者數組,應用起來非常方便,不需要再另寫循環程序來對各元素分別進行計算。掌握這些函數是進一步學習的基礎。MATLAB人性化的地方在於其自帶函數基本是按照相對應的英文名稱縮寫而來,所以便於記憶。
  • Row函數在Excel數組公式中的應用
    絕大多數excel數組公式中,都可以看到row函數的身影,那麼row函數到底起到什麼作用呢?我們先從它的基本用法說起。
  • java基礎之七:數組
    數組的存儲下面的例子是典型的用法,從一個數組中查找某個值在不在其中數組中查找這是數組求和查找最大及其位置數組的排序,有很多方法,比如冒泡:當然,java提供了相關的實現,在java.util.Arrays中:
  • 自從學會Java中的lambda表達式和函數式編程技巧,再也不用加班了!
    目標類型必須是從上下文推斷出來的函數接口,這限制了lambda只能出現在以下場景中:•    變量聲明•    賦值•    返回語句•    數組初始化•    方法或構造函數參數•    Lambda 主體中•    三元條件表達式•    強制轉換表達式清單4展示了一個應用程式來演示這些目標類型及其上下文。
  • ArrayList,基於數組實現的有序列表
    可以看到前面介紹ArrayList類的五個成員變量的時候,提到的ArrayList有兩個默認的空數組:1、DEFAULTCAPACITY_EMPTY_ELEMENTDATA:在第一個構造函數中出現,是用來使用默認構造方法時候返回的空數組。如果第一次添加數據的話那麼數組擴容長度為DEFAULT_CAPACITY=10。
  • EXCEL中數組的應用之五:什麼是函數公式,什麼是數組公式
    今日講數組的應用之五,今日主要是再次和大家講解幾個概念,什麼是數組、什麼是公式、什麼是數組公式、什麼是函數等概念。我在文章中反覆的講解這些概念,但概念很抽象,是否掌握了概念的實質,可以從對概念的理解上得到確認。
  • 記錄集賦值給數組後,利用轉置函數處理多維數組的方法
    大家好,今日繼續講解VBA資料庫解決方案,今日講解的是第76講,內容是:記錄集賦值給數組後,利用轉置函數處理多維數組的方法。我在第一冊的第43講中,我講了將記錄集存入數組的方案,並通過一個Index函數在工作表中恢復數組數據的方法。今日講的是利用轉置函數來完成同樣的功能。
  • numpy中數組操作的相關函數
    在numpy中,有一系列對數組進行操作的函數,在使用這些函數之前,必須先了解以下兩個基本概念副本視圖副本是一個數組的完整拷貝
  • java之數組作為方法參數的使用
    各位小夥伴們大家好,這次小編要介紹的是java作為方法參數,返回值的使用。首先,小編要介紹的是java作為方法參數的使用。void main(String[] args){int[] array={1,2,34,78};//定義一個方法System.out.println(array);//地址值printArray(array);//(方法的調用)}/** 方法定義的三要素:* 1.返回值類型:只是進行列印,不需要進行計算,也沒有結果,用void* 2.方法名稱:printArray* 3.參數列表:必須有數組
  • java之數組長度的獲取與數組的遍歷
    各位小夥伴們大家好,這次小編要介紹的是java中數組長度的獲取與數組的遍歷,首先小編要介紹的是,數組長度的獲取,如何獲取一個數組的長度呢?獲取數組長度的格式:數組名稱.length。之後,將會出現一個int數字來代表數組的長度。