欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java數(shù)組(Array)最全匯總(上篇)

 更新時間:2023年01月13日 15:36:51   作者:小熊coder  
這篇文章主要介紹了Java數(shù)組(Array)最全匯總(上篇),本文章內(nèi)容詳細(xì),通過案例可以更好的理解數(shù)組的相關(guān)知識,本模塊分為了三部分,本次為上篇,需要的朋友可以參考下

前言

本章是關(guān)于Java數(shù)組的最全匯總,本篇為匯總上篇,主要講了一維數(shù)組的相關(guān)內(nèi)容。

數(shù)組是最常見的一種數(shù)據(jù)結(jié)構(gòu),它是相同類型的用一個標(biāo)識符封裝到一起的基本類型數(shù)據(jù)序列或者對象序列。

數(shù)組使用一個統(tǒng)一的數(shù)組名和不同的下標(biāo)來唯一確定數(shù)組中的元素。

實質(zhì)上,數(shù)組是一個簡單的線性序列,因此訪問速度很快。

本章將詳細(xì)介紹 Java 中數(shù)組的創(chuàng)建、初始化和處理方法,如獲取數(shù)組長度、查找數(shù)組元素和數(shù)組排序等。

本章學(xué)習(xí)要點

  1. 掌握一維數(shù)組的創(chuàng)建方法
  2. 掌握一維數(shù)組的初始化方法
  3. 熟練掌握一維數(shù)組的應(yīng)用
  4. 掌握二維數(shù)組的創(chuàng)建
  5. 掌握二維數(shù)組的初始化
  6. 熟練掌握二維數(shù)組元素的訪問方式
  7. 掌握數(shù)組的復(fù)制方法
  8. 掌握搜索數(shù)組元素的方法
  9. 掌握對數(shù)組的排序算法

Java數(shù)組簡介:數(shù)組是什么?

在某些情況下,雖然可以使用單個變量來存儲信息,但是如果需要存儲的信息較多(例如存儲 50 名學(xué)生的成績),這時再依次創(chuàng)建變量聲明并賦值顯得非常麻煩。

隨著處理的信息量越來越大,工作也就越來越煩瑣,這時可以使用數(shù)組或集合來存儲信息。

通過使用數(shù)組,可以在很大程度上縮短和簡化程序代碼,從而提高應(yīng)用程序的效率。

數(shù)組(array)是一種最簡單的復(fù)合數(shù)據(jù)類型,它是有序數(shù)據(jù)的集合,數(shù)組中的每個元素具有相同的數(shù)據(jù)類型,可以用一個統(tǒng)一的數(shù)組名和不同的下標(biāo)來確定數(shù)組中唯一的元素。

根據(jù)數(shù)組的維度,可以將其分為一維數(shù)組、二維數(shù)組和多維數(shù)組等。

在計算機語言中數(shù)組是非常重要的集合類型,大部分計算機語言中數(shù)組具有如下三個基本特性:

  1. 一致性:數(shù)組只能保存相同數(shù)據(jù)類型元素,元素的數(shù)據(jù)類型可以是任何相同的數(shù)據(jù)類型。
  2. 有序性:數(shù)組中的元素是有序的,通過下標(biāo)訪問。
  3. 不可變性:數(shù)組一旦初始化,則長度(數(shù)組中元素的個數(shù))不可變。

總的來說,數(shù)組具有以下特點:

  • 數(shù)組可以是一維數(shù)組、二維數(shù)組或多維數(shù)組。
  • 數(shù)值數(shù)組元素的默認(rèn)值為 0,而引用元素的默認(rèn)值為 null。
  • 數(shù)組的索引從 0 開始,如果數(shù)組有 n 個元素,那么數(shù)組的索引是從 0 到(n-1)。
  • 數(shù)組元素可以是任何類型,包括數(shù)組類型。
  • 數(shù)組類型是從抽象基類 Array 派生的引用類型。

注意:如果你熟悉 C/C++,請注意,Java 數(shù)組的工作原理與它們不同。

在 Java 中數(shù)組的下標(biāo)是從零開始的,很多計算機語言的數(shù)組下標(biāo)也從零開始。

Java 數(shù)組下標(biāo)訪問運算符是中括號,如 intArray[0],表示訪問 intArray 數(shù)組的第一個元素,0 是第一個元素的下標(biāo)。

Java 中的數(shù)組本身是引用數(shù)據(jù)類型,它的長度屬性是 length。

Java一維數(shù)組的定義、賦值和初始化

當(dāng)數(shù)組中每個元素都只帶有一個下標(biāo)時,這種數(shù)組就是“一維數(shù)組”。

一維數(shù)組(one-dimensional array)實質(zhì)上是一組相同類型數(shù)據(jù)的線性集合,是數(shù)組中最簡單的一種數(shù)組。

數(shù)組是引用數(shù)據(jù)類型,引用數(shù)據(jù)類型在使用之前一定要做兩件事情:聲明和初始化。所以本文將重點介紹一維數(shù)組的創(chuàng)建、初始化和使用。

創(chuàng)建一維數(shù)組

為了在程序中使用一個數(shù)組,必須聲明一個引用該數(shù)組的變量,并指明整個變量可以引用的數(shù)組類型。

聲明一維數(shù)組的語法格式為:

type[] arrayName; // 數(shù)據(jù)類型[] 數(shù)組名;

或者

type arrayName[]; // 數(shù)據(jù)類型 數(shù)組名[];

可見數(shù)組的聲明有兩種形式:一種是中括號”[]“跟在元素數(shù)據(jù)類型之后,另一種是中括號”[]“跟在變量名之后。

對于以上兩種語法格式而言,Java 更推薦采用第一種聲明格式,因為第一種格式不僅具有更好的語意,而且具有更好的可讀性。

對于第一種格式

type[] arrayName

很容易理解這是定義一個變量,其中變量名是 arrayName,而變量類型是 type[]。

前面已經(jīng)指出:type[] 確實是一種新類型,與 type 類型完全不同(例如 int 類型是基本類型,但 int[] 是引用類型)。

因此,這種方式既容易理解,也符合定義變量的語法。

但第二種格式

type arrayName[]

可讀性就差了,看起來好像定義了一個類型為 type 的變量,而變量名是 arrayName[],這與真實的含義相去甚遠(yuǎn)。

可能有些讀者非常喜歡

type arrayName[]

這種定義數(shù)組的方式,這可能是因為早期某些計算機讀物的誤導(dǎo),從現(xiàn)在開始最好就不要再使用這種糟糕的方式了。

提示:Java 的模仿者 C# 就不再支持

type arrayName[]

這種語法,它只支持第一種定義數(shù)組的語法。

以上兩種格式都可以聲明一個數(shù)組,其中的數(shù)據(jù)類型既可以是基本數(shù)據(jù)類型,也可以是引用數(shù)據(jù)類型。

數(shù)組名可以是任意合法的變量名。

聲明數(shù)組就是要告訴計算機該數(shù)組中數(shù)據(jù)的類型是什么。例如:

int[] score;    // 存儲學(xué)生的成績,類型為整型double[] price;    // 存儲商品的價格,類型為浮點型String[] name;    // 存儲商品名稱,類型為字符串型

在聲明數(shù)組時不需要規(guī)定數(shù)組的長度,例如:

int score[10]; // 這是錯誤的

注意:在聲明數(shù)組變量時千萬不要漏寫[]。

分配空間

聲明了數(shù)組,只是得到了一個存放數(shù)組的變量,并沒有為數(shù)組元素分配內(nèi)存空間,不能使用。

因此要為數(shù)組分配內(nèi)存空間,這樣數(shù)組的每一個元素才有一個空間進(jìn)行存儲。

簡單地說,分配空間就是要告訴計算機在內(nèi)存中為它分配幾個連續(xù)的位置來存儲數(shù)據(jù)。

在 Java 中可以使用 new 關(guān)鍵字來給數(shù)組分配空間。分配空間的語法格式如下:

arrayName = new type[size]; // 數(shù)組名 = new 數(shù)據(jù)類型[數(shù)組長度];

其中,數(shù)組長度就是數(shù)組中能存放的元素個數(shù),顯然應(yīng)該為大于 0 的整數(shù),例如:

score = new int[10];price = new double[30];name = new String[20];

這里的 score 是已經(jīng)聲明過的 int[] 類型的變量,當(dāng)然也可以在聲明數(shù)組時就給它分配空間,語法格式如下:

type[] arrayName = new type[size]; // 數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[數(shù)組長度];

例 1

例如,聲明并分配一個長度為 5 的 int 類型數(shù)組 arr,代碼如下:

int[] arr = new int[5];

執(zhí)行后 arr 數(shù)組在內(nèi)存中的格式如圖 1 所示。

img

圖 1 一維數(shù)組的內(nèi)存格式

在圖 1 中 arr 為數(shù)組名稱,方括號“[]”中的值為數(shù)組的下標(biāo)。

數(shù)組通過下標(biāo)來區(qū)分?jǐn)?shù)組中不同的元素,并且下標(biāo)是從 0 開始的。

因此這里包含 5 個元素的 arr 數(shù)組最大下標(biāo)為 4。

注意:一旦聲明了數(shù)組的大小,就不能再修改。這里的數(shù)組長度也是必需的,不能少。

盡管數(shù)組可以存儲一組基本數(shù)據(jù)類型的元素,但是數(shù)組整體屬于引用數(shù)據(jù)類型。

當(dāng)聲明一個數(shù)組變量時,其實是創(chuàng)建了一個類型為“數(shù)據(jù)類型[]”(如 int[]、double[]、String[])的數(shù)組對象。

初始化一維數(shù)組

Java 語言中數(shù)組必須先初始化,然后才可以使用。

所謂初始化,就是為數(shù)組的數(shù)組元素分配內(nèi)存空間,并為每個數(shù)組元素賦初始值。

能不能只分配內(nèi)存空間,不賦初始值呢?

不行,一旦為數(shù)組的每個數(shù)組元素分配了內(nèi)存空間,每個內(nèi)存空間里存儲的內(nèi)容就是該數(shù)組元素的值,即使這個內(nèi)存空間存儲的內(nèi)容為空,這個空也是一個值(null)。

不管以哪種方式來初始化數(shù)組,只要為數(shù)組元素分配了內(nèi)存空間,數(shù)組元素就具有了初始值。

初始值的獲得有兩種形式,一種由系統(tǒng)自動分配,另一種由程序員指定。

數(shù)組在初始化數(shù)組的同時,可以指定數(shù)組的大小,也可以分別初始化數(shù)組中的每一個元素。

在 Java 語言中,初始化數(shù)組有以下 3 種方式。

使用 new 指定數(shù)組大小后進(jìn)行初始化

使用 new 關(guān)鍵字創(chuàng)建數(shù)組,在創(chuàng)建時指定數(shù)組的大小。語法如下:

type[] arrayName = new int[size];

創(chuàng)建數(shù)組之后,元素的值并不確定,需要為每一個數(shù)組的元素進(jìn)行賦值,其下標(biāo)從 0 開始。

例 2

創(chuàng)建包含 5 個元素的 int 類型的數(shù)組,然后分別將元素的值設(shè)置為 1、2、3、5 和 8。代碼如下:

int[] number = new int[5];
number[0] = 1;
number[1] = 2;
number[2] = 3;
number[3] = 5;
number[4] = 8;

如果程序員只指定了數(shù)組的長度,那么系統(tǒng)將負(fù)責(zé)為這些數(shù)組元素分配初始值。指定初始值時,系統(tǒng)按如下規(guī)則分配初始值。

  • 數(shù)組元素的類型是基本類型中的整數(shù)類型(byte、short、int 和 long),則數(shù)組元素的值是 0。
  • 數(shù)組元素的類型是基本類型中的浮點類型(float、double),則數(shù)組元素的值是 0.0。
  • 數(shù)組元素的類型是基本類型中的字符類型(char),則數(shù)組元素的值是‘\u0000’。
  • 數(shù)組元素的類型是基本類型中的布爾類型(boolean),則數(shù)組元素的值是 false。
  • 數(shù)組元素的類型是引用類型(類、接口和數(shù)組),則數(shù)組元素的值是 null。

使用 new 指定數(shù)組元素的值

使用上述方式初始化數(shù)組時,只有在為元素賦值時才確定值。

可以不使用上述方式,而是在初始化時就已經(jīng)確定值。語法如下:

type[] arrayName = new type[]{值 1,值 2,值 3,值 4,? ? ?,值 n};

例 3

更改例 2 中的代碼,使用 new 直接指定數(shù)組元素的值。代碼如下:

int[] number = new int[]{1, 2, 3, 5, 8};

上述代碼的效果等價于例 2 的效果。

注意:不要在進(jìn)行數(shù)組初始化時,既指定數(shù)組的長度,也為每個數(shù)組元素分配初始值,這樣會造成代碼錯誤。例如下面代碼:

int[] number = new int [5] {1,2,3,4,5};

3)直接指定數(shù)組元素的值

在上述兩種方式的語法中,type 可以省略,如果已經(jīng)聲明數(shù)組變量,那么直接使用這兩種方式進(jìn)行初始化。

如果不想使用上述兩種方式,那么可以不使用 new 直接指定數(shù)組元素的值。語法如下:

type[] arrayName = {值 1,值 2,值 3,...,值 n};

例 4

在前面例子的基礎(chǔ)上更改代碼,直接使用上述語法實現(xiàn) number 數(shù)組的初始化。代碼如下:

int[] number = {1,2,3,5,8};

使用這種方式時,數(shù)組的聲明和初始化操作要同步,即不能省略數(shù)組變量的類型。如下的代碼就是錯誤的:

int[] number;
number = {1,2,3,5,8};

獲取單個元素

獲取單個元素是指獲取數(shù)組中的一個元素,如第一個元素或最后一個元素。

獲取單個元素的方法非常簡單,指定元素所在數(shù)組的下標(biāo)即可。語法如下:

arrayName[index];

其中,arrayName 表示數(shù)組變量,index 表示下標(biāo),下標(biāo)為 0 表示獲取第一個元素,下標(biāo)為 array.length-1 表示獲取最后一個元素。

當(dāng)指定的下標(biāo)值超出數(shù)組的總長度時,會拋出 ArraylndexOutOfBoundsException 異常。

例 5

獲取 number 數(shù)組中的第一個元素、最后一個元素和第六個元素,并將元素的值輸出。代碼如下:

int[] number = {1,2,3,5,8};
System.out.println("獲取第一個元素:"+number[0]);
System.out.println("獲取最后一個元素:"+number[number.length-1]);
System.out.println("獲取第6個元素:"+number[5]);

執(zhí)行上述代碼,輸出結(jié)果如下所示:

獲取第一個元素:1
獲取最后一個元素:8
java.lang.ArrayIndexOutOfBoundsException: 5

我們一共存入了 5 個值,所以下標(biāo)的取值為 0~4。

因為 number[5] 取出的內(nèi)容超過了這個下標(biāo),所以輸出結(jié)果會提示數(shù)組索引超出綁定異常(ArrayIndexOutOfBoundsException)。

這一點是在使用數(shù)組中是經(jīng)常出現(xiàn)的問題,大家在編寫程序時應(yīng)該引起注意。

例 6

編寫一個 Java 程序,使用數(shù)組存放錄入的 5 件商品價格,然后使用下標(biāo)訪問第 3 個元素的值。

import java.util.Scanner;
public class Test06 {
    public static void main(String[] args) {
        int[] prices = new int[5]; // 聲明數(shù)組并分配空間
        Scanner input = new Scanner(System.in); // 接收用戶從控制臺輸入的數(shù)據(jù)
        for (int i = 0; i < prices.length; i++) {
            System.out.println("請輸入第" + (i + 1) + "件商品的價格:");
            prices[i] = input.nextInt(); // 接收用戶從控制臺輸入的數(shù)據(jù)
        }
        System.out.println("第 3 件商品的價格為:" + prices[2]);
    }
}

上述代碼的“int[] prices = new int[5]”語句創(chuàng)建了需要 5 個元素空間的 prices 數(shù)組,然后結(jié)合 for 循環(huán)向數(shù)組中的每個元素賦值。

注意:在 Java 中取得數(shù)組的長度(也就是數(shù)組元素的長度)可以利用“數(shù)組名稱.length”,返回一個 int 型數(shù)據(jù)。

數(shù)組的索引從 0 開始,而 for 循環(huán)中的變量 i 也從 0 開始,因此 score 數(shù)組中的元素可以使用 scored 來表示,大大簡化了代碼。

最后使用 prices[2] 獲取 prices 數(shù)組的第 3 個元素,最終運行效果如下所示。

請輸入第1件商品的價格:
5
請輸入第2件商品的價格:
4
請輸入第3件商品的價格:
6
請輸入第4件商品的價格:
4
請輸入第5件商品的價格:
8
第 3 件商品的價格為:6

獲取全部元素

當(dāng)數(shù)組中的元素數(shù)量不多時,要獲取數(shù)組中的全部元素,可以使用下標(biāo)逐個獲取元素。

但是,如果數(shù)組中的元素過多,再使用單個下標(biāo)則顯得煩瑣,此時使用一種簡單的方法可以獲取全部元素——使用循環(huán)語句。

下面利用 for 循環(huán)語句遍歷 number 數(shù)組中的全部元素,并將元素的值輸出。代碼如下:

int[] number = {1,2,3,5,8};
for (int i=0;i<number.length;i++) {
    System.out.println("第"+(i+1)+"個元素的值是:"+number[i]);
}

除了使用 for 語句,還可以使用 foreach 遍歷數(shù)組中的元素,并將元素的值輸出。代碼如下:

for(int val:number) {
    System.out.print("元素的值依次是:"+val+"\t");
}

到此這篇關(guān)于Java數(shù)組(Array)最全匯總(上篇)的文章就介紹到這了,其他兩個部分的內(nèi)容(中、下篇)請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springmvc項目web.xml中servlet-mapping路徑映射配置注意說明

    Springmvc項目web.xml中servlet-mapping路徑映射配置注意說明

    這篇文章主要介紹了Springmvc項目web.xml中servlet-mapping路徑映射配置注意說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Linux系統(tǒng)下安裝和卸載JDK8的方式

    Linux系統(tǒng)下安裝和卸載JDK8的方式

    這篇文章主要介紹了Linux安裝和卸載JDK8,第一種是使用yum命令一鍵安裝,默認(rèn)安裝目錄在/usr/lib/jvm第二種是手動安裝,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • Spring中@ControllerAdvice注解的用法解析

    Spring中@ControllerAdvice注解的用法解析

    這篇文章主要介紹了Spring中@ControllerAdvice注解的用法解析,顧名思義,@ControllerAdvice就是@Controller 的增強版,@ControllerAdvice主要用來處理全局?jǐn)?shù)據(jù),一般搭配@ExceptionHandler、@ModelAttribute以及@InitBinder使用,需要的朋友可以參考下
    2023-10-10
  • SpringBoot集成FTP與SFTP連接池流程

    SpringBoot集成FTP與SFTP連接池流程

    在項目開發(fā)中,一般文件存儲很少再使用SFTP服務(wù),但是也不排除合作伙伴使用SFTP來存儲項目中的文件或者通過SFTP來實現(xiàn)文件數(shù)據(jù)的交互,這篇文章主要介紹了SpringBoot集成FTP與SFTP連接池
    2022-12-12
  • Spring?代理?Bean?獲取不到原始?Bean?對象注解解決方法

    Spring?代理?Bean?獲取不到原始?Bean?對象注解解決方法

    這篇文章主要介紹了Spring?代理?Bean?獲取不到原始?Bean?對象注解解決方法,文章圍繞主題相關(guān)資料展開詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-04-04
  • java使用靜態(tài)關(guān)鍵字實現(xiàn)單例模式

    java使用靜態(tài)關(guān)鍵字實現(xiàn)單例模式

    這篇文章主要為大家詳細(xì)介紹了java使用靜態(tài)關(guān)鍵字實現(xiàn)單例模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • java高并發(fā)的ReentrantLock重入鎖

    java高并發(fā)的ReentrantLock重入鎖

    這篇文章主要介紹了如何教你完全理解ReentrantLock重入鎖,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,下面我們來一起學(xué)習(xí)一下吧
    2021-10-10
  • Java冒泡排序簡單實現(xiàn)

    Java冒泡排序簡單實現(xiàn)

    這篇文章主要介紹了Java冒泡排序簡單實現(xiàn),具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Java定時器通信協(xié)議管理模塊Timer詳解

    Java定時器通信協(xié)議管理模塊Timer詳解

    這篇文章主要介紹了Java定時器通信協(xié)議管理模塊Timer,?Timer一般指定時器(通信協(xié)議管理模塊)人類最早使用的定時工具是沙漏或水漏,但在鐘表誕生發(fā)展成熟之后,人們開始嘗試使用這種全新的計時工具來改進(jìn)定時器,達(dá)到準(zhǔn)確控制時間的目的
    2022-08-08
  • Spring?Boot超大文件上傳實現(xiàn)秒傳功能

    Spring?Boot超大文件上傳實現(xiàn)秒傳功能

    這篇文章主要介紹了Spring?Boot超大文件上傳實現(xiàn)秒傳功能,在實現(xiàn)分片上傳的過程,需要前端和后端配合,比如前后端的上傳塊號的文件大小,前后端必須得要一致,否則上傳就會有問題,需要的朋友可以參考下
    2022-12-12

最新評論