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

Java中的數(shù)組使用詳解及練習(xí)

 更新時(shí)間:2024年03月07日 09:29:07   作者:要努力點(diǎn)  
數(shù)組是Java程序中最常見的一種數(shù)據(jù)結(jié)構(gòu),它能夠?qū)⑾嗤愋偷臄?shù)據(jù)用一個(gè)標(biāo)識(shí)符封裝到一起,構(gòu)成一個(gè)對(duì)象序列或基本數(shù)據(jù)類型,這篇文章主要給大家介紹了關(guān)于Java中數(shù)組使用詳解及練習(xí)的相關(guān)資料,需要的朋友可以參考下

一、數(shù)組的概念與基本要素

1.概念

數(shù)組(array)是一種最簡(jiǎn)單的復(fù)合數(shù)據(jù)類型,它是有序數(shù)據(jù)的集合,數(shù)組中的每個(gè)元素具有相同的數(shù)據(jù)類型,可以用一個(gè)統(tǒng)一的數(shù)組名和不同的下標(biāo)來(lái)確定數(shù)組中唯一的元素。根據(jù)數(shù)組的維度,可以將其分為一維數(shù)組、二維數(shù)組和多維數(shù)組等。

2.基本要素

一個(gè)數(shù)組由4個(gè)基本元素構(gòu)成:數(shù)組名稱、數(shù)組元素、元素索引、數(shù)據(jù)類型。

數(shù)組的索引就相當(dāng)于C語(yǔ)言中數(shù)組的下標(biāo),關(guān)于數(shù)組的長(zhǎng)度可以用數(shù)組名.length求出。

int[] array = {1,2,3};
int sz = arr.length;

3.數(shù)組的定義

關(guān)于數(shù)組的定義,其實(shí)有很多種定義方法,接下來(lái),我會(huì)給你們介紹幾種定義數(shù)組的方法。

//第一種定義數(shù)組的方法:
int[] array1 = {1,2,3};//直接賦值(靜態(tài)初始化)
                      //int[]是數(shù)組的類型,array為數(shù)組名,隨意取名字

//第二種定義數(shù)組的方法:
int[] array2 = new int[]{1,2,3,4};//數(shù)組的動(dòng)態(tài)初始化


//第三種定義數(shù)組的方法:
int[] array3 = new int[10];//只是分配了內(nèi)存,但是沒(méi)有進(jìn)行賦值,默認(rèn)值都是0,

//第四種定義數(shù)組的方法:
int[] array4;
array = new int[]{1,2,3};//一定要為數(shù)組符初值,不然編譯器會(huì)報(bào)錯(cuò),

對(duì)于沒(méi)有賦初值的數(shù)組,編譯器會(huì)自動(dòng)賦值,以下表格是不同類型的數(shù)組,初值大?。?/p>

類型初始值
byte0
short0
int0
long0
float0.0f
double0.0
char‘/u0000’
booleanfalse

4.注意事項(xiàng)

  • 靜態(tài)初始化雖然沒(méi)有指定數(shù)組的長(zhǎng)度,編譯器在編譯時(shí)會(huì)根據(jù){}中元素個(gè)數(shù)來(lái)確定數(shù)組的長(zhǎng)度。
  • 靜態(tài)初始化時(shí), {}中數(shù)據(jù)類型必須與[]前數(shù)據(jù)類型一致。
  • 靜態(tài)初始化可以簡(jiǎn)寫,省去后面的new T[]。T可以為任意數(shù)據(jù)類型。
  • 如果數(shù)組中存儲(chǔ)元素類型為引用類型,默認(rèn)值為null。

二、數(shù)組的使用

1.對(duì)數(shù)組中的元素進(jìn)行訪問(wèn)

數(shù)組在內(nèi)存中是一段連續(xù)的空間,空間的編號(hào)都是從0開始的,依次遞增,該編號(hào)稱為數(shù)組的下標(biāo),數(shù)組可以通過(guò)索引訪問(wèn)其任意位置的元素。

int[] array = {1,2,3,4,5,6,7,8};
System.out.println(array[0]);//1
System.out.println(array[1]);//2
System.out.println(array[2]);//3
System.out.println(array[3]);//4
System.out.println(array[4]);//5

//當(dāng)然也可以對(duì)數(shù)組中的元素進(jìn)行修改,、
array[0]=111;
System.out.println(array[0]);//111

2.注意事項(xiàng)

(1)數(shù)組是一段連續(xù)的內(nèi)存空間,因此支持隨機(jī)訪問(wèn),即通過(guò)下標(biāo)訪問(wèn)快速訪問(wèn)數(shù)組中任意位置的元素。

(2)下標(biāo)從0開始,介于[0, N)之間不包含N,N為元素個(gè)數(shù),不能越界,否則會(huì)報(bào)出下標(biāo)越界異常。

所以在訪問(wèn)數(shù)組元素時(shí)一定不要越界!?。?/p>

3.對(duì)數(shù)組的遍歷

對(duì)于什么是對(duì)數(shù)組的遍歷,就是將數(shù)組的元素全都訪問(wèn)一遍,如將數(shù)組中的全部元素的打印一遍。

第一種數(shù)組遍歷方法:直接打印數(shù)組中的每一個(gè)元素

Demo:

int[] array = {1,2,3,4};
System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
System.out.println(array[3]);

本方法對(duì)于元素個(gè)數(shù)較少的數(shù)組來(lái)說(shuō)可以應(yīng)用,但對(duì)于有幾十個(gè)元素的數(shù)組來(lái)說(shuō),太麻煩了,接下來(lái)為大家講解第二種方法。

第二種數(shù)組遍歷的方法:采用for循環(huán)打印

Demo:

int[] array = {1,2,3,4};
for(int i = 0;i < array.length;i++) {
    System.out.print(array[i]);
}

第三種數(shù)組遍歷的方法:采用foreach的方式

Demo:

int[] array = {1,2,3,4,5};
for(int x : array) {
    System.out.print(x+" ");
}

foreach的語(yǔ)法格式:冒號(hào)右邊寫數(shù)組名,左邊寫由數(shù)組當(dāng)中數(shù)據(jù)類型定義的變量。

但是foreach也有局限性,如果要求去訪問(wèn)數(shù)組中的某一個(gè)元素的時(shí)候,就不能進(jìn)行訪問(wèn),顯然這時(shí)的for循環(huán)就占據(jù)了優(yōu)勢(shì)。

第四種遍歷數(shù)組的方法:采用專門的工具

Demo:

import java.util.Arrays;

int[] array = {1,2,3,4,5};
String ret = Arrays.toString(array);//將數(shù)組轉(zhuǎn)換成字符串,然后返回.
System.out.println(ret);

注:要使用Arrays這個(gè)工具時(shí)要導(dǎo)入其專有的包!

三、數(shù)組在內(nèi)存的存在形式

1.數(shù)組是一種引用變量

基本數(shù)據(jù)類型創(chuàng)建的變量,稱為基本變量,該變量空間中直接存放的是其所對(duì)應(yīng)的值;而引用數(shù)據(jù)類型創(chuàng)建的變量,一般稱為對(duì)象的引用,其空間中存儲(chǔ)的是對(duì)象所在空間的地址,數(shù)組就是一種引用數(shù)據(jù)類型。

int a = 10;
int b = 20;
int[] array =new int[]{1,2,3,4};

在上述代碼中,a、b、arr,都是方法內(nèi)部的變量,因此其空間都在main方法對(duì)應(yīng)的棧幀中分配。a、b是內(nèi)置類型的變量,因此其空間中保存的就是給該變量初始化的值。array是數(shù)組類型的引用變量,其內(nèi)部保存的內(nèi)容可以簡(jiǎn)單理解成是數(shù)組在堆空間中的首地址。

從圖中可以看出,引用變量與基本數(shù)據(jù)類型的變量的不同,引用變量不會(huì)存儲(chǔ)對(duì)象本身,可以簡(jiǎn)單理解成存儲(chǔ)的是對(duì)象在堆中空間的起始地址。通過(guò)該地址,引用變量便可以去操作對(duì)象,(但其實(shí)這“地址”是經(jīng)過(guò)哈希得到的),此前不要求掌握該知識(shí)點(diǎn)。

2了解引用變量(數(shù)組)

Demo:

int[] array1 = {1,2,3,4};
System.out.print(Arrays.toString(array1));//打印[1,2,3,4]

int[] array2 = array1;
array2[1] = 99;
System.out.print(Arrays.toString(array1));//打印[1,99,3,4]
System.out.print(Arrays.toString(array2));//打印[1,99,3,4]

代碼的解析:

首先創(chuàng)建一個(gè)數(shù)組array1,并初始化賦值為1,2,3,4,然后打印數(shù)組array1,接著申請(qǐng)另一款空間,用來(lái)創(chuàng)建array2,且array2=array1,說(shuō)明兩個(gè)數(shù)組都指向同一塊空間,修改array2中的第二個(gè)元素也就相當(dāng)于修改了array1中對(duì)應(yīng)的元素。

3.注意事項(xiàng)

(1)一個(gè)引用不能同時(shí)指向多個(gè)對(duì)象例:

(2)一個(gè)對(duì)象可以被多個(gè)引用所指向例:

(3)

int[] array = 0;
/*這種寫法是錯(cuò)誤的,因?yàn)?是一種基本數(shù)據(jù)類型,
 *而array是一種引用數(shù)據(jù)類型,如果將0改成null就不會(huì)錯(cuò)。
 *即代表這個(gè)引用不指向任何對(duì)象
*/

注:null在Java中表示空引用,也就是一個(gè)不指向?qū)ο蟮囊?,并不?的意思。

四、數(shù)組的應(yīng)用場(chǎng)景

1.用來(lái)保存數(shù)據(jù)

Demo:

int[] array = {1,2,3};
for(int i = 0;i < array.length;i++ ) {
    System.out.print(array[i]);
}

2.數(shù)組作為方法的參數(shù)

Demo:

public class TestDemo {
    public static void func1 (int[] array1) {
        array = new int[10];
    }
    public static void func2 (int[] array) {
        array[0] = 99;
    }
    public static void main(String[] args) {
        int[] array = {1,2,3,4};
        func1(array);
        System.out.println(Arrays.toString(array));
        func2(array);
        System.out.println(Arrays.toString(array));

    }
}

代碼解釋:對(duì)func1方法進(jìn)行解釋就行,func2同理

形參的指向改變不會(huì)影響實(shí)參的指向改變?。?!

3.數(shù)組作為方法的返回值

Demo:

public class TestDemo {
    public static int[] func() {
        int[] array = {1,2,3,4};
        return array;
    }
    public static void main(String[] args) {
        int[] ret = func();
        System.out.println(Arrays.toString(ret));
    }
}

五、數(shù)組的練習(xí)

小伙伴們,也可以直接去寫一下,再過(guò)來(lái)看示例代碼,增強(qiáng)自己的代碼能力。

1.數(shù)組轉(zhuǎn)成字符串

Demo:

//第一種是利用編譯器自帶的工具
int[] array = {1,2,3};
String ret = Arrays.toString(array);
System.out,print(ret);


//第二種利用自己寫的方法去解決
public class TestDemo {
    public static String mytoString(int[] arr) {
        if(arr == null){
            return "null";
        }
        String ret = "[";
        for(int i=0;i<arr.length;i++) {
            ret+=arr[i];
            if(i!=arr.length-1) {
                ret+=",";
            }
        }
        ret+="]";
        return ret;
    }
    public static void main(String[] args) {
        int[] array = {1,2,3,4,5,6};
        String ret = mytoString(array);
        System.out.println(ret);
    }
    
    
//打印結(jié)果為 [1,2,3,4,5,6]

2.數(shù)組的拷貝

本練習(xí)還是采用兩種方式,一種是編譯器自帶的,另一種是自己所寫的方法。

下面是錯(cuò)誤代碼?。?!

/*
        int[] array1 = {1,2,3};
        int[] array2 = array1;
*/
//這不是對(duì)數(shù)組的拷貝,因?yàn)闆](méi)有產(chǎn)生新的空間

Demo:

//第一種:自己寫的方法
public class TestDemo {
    public static void main(String[] args) {
        int[] array1 = {1,2,3,4};
        int[] array2 = new int[array1.length];

        for(int i=0;i<array1.length;i++) {
            array2[i]=array1[i];
        }

        System.out.println(Arrays.toString(array1));
        System.out.println("復(fù)制之后的數(shù)組為:");
        System.out.println(Arrays.toString(array2));

    }
}

//最后輸出為:
  [1,2,3,4]
  復(fù)制之后的數(shù)組為:
  [1,2,3,4] 
    
    
//第二種編譯器自帶的方法
    import java.util.Arrays;
    
    int[] array1 = {1,2,3,4};
    int[] array2 = Arrays.copyOf(array1,array1.length);

    System.out.println(Arrays.toString(array1));
    System.out.println(Arrays.toString(array2));

//最后輸出為:
    [1,2,3,4] 
    [1,2,3,4] 

顯然自己寫的方法沒(méi)有編譯器自帶的工具簡(jiǎn)潔,但是不能說(shuō)有了這些工具就可以不用寫代碼了,自己的能力還是要加強(qiáng),這些工具只是幫我們減輕了負(fù)擔(dān),但是原理還是要自己弄懂。

3.求數(shù)組的平均值

由于這道題比較簡(jiǎn)單,本博主直接就給答案咯。

Demo:

public class TestDemo {
    public static void main(String[] args) {
        int[] array = {23,45,2,74,86,24};
        int sum = 0 ;
        double ave = 0.0f;
        for(int i=0; i<array.length;i++) {
             sum=sum + array[i];
        }
         ave = sum/array.length;
        System.out.println(ave);

    }
}

//最后結(jié)果:
  42.0

4.數(shù)組排序(冒泡排序)

算法思路:

  • 將數(shù)組中相鄰元素從前往后依次進(jìn)行比較,如果前一個(gè)元素比后一個(gè)元素大,則交換,一趟下來(lái)后最大元素就在數(shù)組的末尾
  • 依次從上上述過(guò)程,直到數(shù)組中所有的元素都排列好

Demo:

public class TestDemo {
    public static void main(String[] args) {
        int[] array = {23,4,53,1,765,52,356,9,7,2,324};
        System.out.println("排序之前的數(shù)組:");
        System.out.println(Arrays.toString(array));
        for(int j = 1;j<array.length;j++) {
            for(int i = 0;i<array.length-j;i++) {
                if(array[i]>array[i+1]) {
                    int tmp = array[i];    //交換數(shù)據(jù)
                    array[i] = array[i+1];
                    array[i+1] = tmp;
                }
            }
        }
        System.out.println("排序之后的數(shù)組:");
        System.out.println(Arrays.toString(array));
    }
}

//排序之前的數(shù)組:
[23, 4, 53, 1, 765, 52, 356, 9, 7, 2, 324]
//排序之后的數(shù)組:
[1, 2, 4, 7, 9, 23, 52, 53, 324, 356, 765]

5.數(shù)組逆序

題目理解:就是給定一個(gè)數(shù)組,將其倒序輸出。

思路:

先定義兩個(gè)下標(biāo)分別指向數(shù)組的第一個(gè)元素和最后一個(gè)元素,將數(shù)組中的第一個(gè)元素和最后一個(gè)元素交換位置,然后指向第一個(gè)元素的下標(biāo)進(jìn)行加加,指向最后一個(gè)元素的下標(biāo)進(jìn)行減減。

Demo:

public class TestDemo {
    public static void main(String[] args) {
        int[] array = {1,2,3,4,5,6};
        int left = 0;
        int right = array.length-1;
        System.out.println("排序之前的數(shù)組:");
        System.out.println(Arrays.toString(array));

        while(left<=right) {
            int tmp = array[left];
            array[left] = array[right];
            array[right] = tmp;
            left++;
            right--;
        }
        System.out.println("排序之后的數(shù)組:");
        System.out.println(Arrays.toString(array));
    }
}

//運(yùn)行結(jié)果:
排序之前的數(shù)組:
[1, 2, 3, 4, 5, 6]
排序之后的數(shù)組:
[6, 5, 4, 3, 2, 1]

六、二維數(shù)組

1.二維數(shù)組的定義

關(guān)于二維數(shù)組的定義有很多種方法,這里咱們介紹最常用的三種。

Demo:

//第一種定義二維數(shù)組的方法:(行數(shù)和列數(shù)都知道的情況)
//  數(shù)組類型[][] 數(shù)組名 = new 數(shù)組類型[行數(shù)][列數(shù)];

 int[][] arr = new int[2][3];//定義一個(gè)3行4列的數(shù)組

//第二種定義數(shù)組的方法:(只知道行數(shù),不知道列數(shù))
//  數(shù)組類型[][] 數(shù)組名 = new 數(shù)組類型[行數(shù)][];

int[][] arr = new int[2][];

//第三種定義二維數(shù)組的方法:(知道具體的數(shù)據(jù))
//  數(shù)據(jù)類型[][] 數(shù)組名 = {{第0行初始值},{第1行初始值},···,{第n行初始值}};

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

以上就是關(guān)于二維數(shù)組最常見的定義方法?。?!

2.二維數(shù)組的打印

二維數(shù)組本質(zhì)上也就是一維數(shù)組, 只不過(guò)每個(gè)元素又是一個(gè)一維數(shù)組.

Demo:

public class TestDemo {
    public static void main(String[] args) {
        int[][] array = {{1,2},{3,4,5},{6,7,8,9}};
        for(int i=0;i< array.length;i++) {
            for(int j=0;j<array[i].length;j++) {
                System.out.print(array[i][j]+" ");
            }
            System.out.println(" ");
        }
    }
}

//運(yùn)行結(jié)果:
1 2  
3 4 5  
6 7 8 9 

由于二維數(shù)組的應(yīng)用和一維數(shù)組并沒(méi)有太大的區(qū)別,所以,在這里不做介紹,學(xué)會(huì)如何定義二維數(shù)組就好。

總結(jié)

到此這篇關(guān)于Java中的數(shù)組使用詳解及練習(xí)的文章就介紹到這了,更多相關(guān)Java數(shù)組詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot如何整合redis實(shí)現(xiàn)過(guò)期key監(jiān)聽事件

    SpringBoot如何整合redis實(shí)現(xiàn)過(guò)期key監(jiān)聽事件

    這篇文章主要介紹了SpringBoot如何整合redis實(shí)現(xiàn)過(guò)期key監(jiān)聽事件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot實(shí)現(xiàn)動(dòng)態(tài)配置及項(xiàng)目打包部署上線功能

    SpringBoot實(shí)現(xiàn)動(dòng)態(tài)配置及項(xiàng)目打包部署上線功能

    本文講解的是如何使用Spring動(dòng)態(tài)配置文件,實(shí)現(xiàn)不同環(huán)境不同配置,靈活切換配置文件;以及講述了如何使用?Maven?打包,然后上傳至Linux服務(wù)器進(jìn)行部署,對(duì)SpringBoot打包部署上線過(guò)程感興趣的朋友一起看看吧
    2022-10-10
  • 關(guān)于Java中的 JSP 詳解

    關(guān)于Java中的 JSP 詳解

    JSP 代表 Java 服務(wù)器頁(yè)面。它是一種在應(yīng)用服務(wù)器端使用的編程工具。JSP 基本上用于支持平臺(tái)–獨(dú)立和動(dòng)態(tài)的方法來(lái)構(gòu)建 Web 依賴的應(yīng)用程序。JSP 頁(yè)面類似于 ASP 頁(yè)面,因?yàn)樗鼈兪窃诜?wù)器上編譯的,而不是在用戶的 Web 瀏覽器上進(jìn)行編譯。下面來(lái)看看文章的詳細(xì)介紹內(nèi)容
    2021-11-11
  • 使用Feign設(shè)置Token鑒權(quán)調(diào)用接口

    使用Feign設(shè)置Token鑒權(quán)調(diào)用接口

    這篇文章主要介紹了使用Feign設(shè)置Token鑒權(quán)調(diào)用接口,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 詳解如何把cmd黑窗口把java文件打包成jar

    詳解如何把cmd黑窗口把java文件打包成jar

    本文主要介紹了如何把cmd黑窗口把java文件打包成jar,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 老生常談foreach(增強(qiáng)for循環(huán))和for的區(qū)別

    老生常談foreach(增強(qiáng)for循環(huán))和for的區(qū)別

    下面小編就為大家?guī)?lái)一篇老生常談foreach(增強(qiáng)for循環(huán))和for的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • 30w+數(shù)據(jù)使用RedisTemplate?pipeline空指針NullPointerException異常分析

    30w+數(shù)據(jù)使用RedisTemplate?pipeline空指針NullPointerException異常分析

    這篇文章主要為大家介紹了30w+數(shù)據(jù)使用RedisTemplate?pipeline空指針NullPointerException異常分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • 如何去除Java中List集合中的重復(fù)數(shù)據(jù)

    如何去除Java中List集合中的重復(fù)數(shù)據(jù)

    這篇文章主要介紹了Java中List集合去除重復(fù)數(shù)據(jù)的方法,對(duì)大家的工作或?qū)W習(xí)有一定價(jià)值,有需求的朋友可以參考下
    2020-05-05
  • Hibernate映射解析之關(guān)聯(lián)映射詳解

    Hibernate映射解析之關(guān)聯(lián)映射詳解

    所謂關(guān)聯(lián)映射就是將關(guān)聯(lián)關(guān)系映射到數(shù)據(jù)庫(kù)里,在對(duì)象模型中就是一個(gè)或多個(gè)引用。下面這篇文章詳細(xì)的給大家介紹了Hibernate映射解析之關(guān)聯(lián)映射的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-02-02
  • Java互斥鎖簡(jiǎn)單實(shí)例

    Java互斥鎖簡(jiǎn)單實(shí)例

    這篇文章主要介紹了Java互斥鎖,較為詳細(xì)的分析了java互斥鎖的概念與功能,并實(shí)例描述了java互斥鎖的原理與使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07

最新評(píng)論