最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的數組使用詳解及練習

 更新時間:2024年03月07日 09:29:07   作者:要努力點  
數組是Java程序中最常見的一種數據結構,它能夠將相同類型的數據用一個標識符封裝到一起,構成一個對象序列或基本數據類型,這篇文章主要給大家介紹了關于Java中數組使用詳解及練習的相關資料,需要的朋友可以參考下

一、數組的概念與基本要素

1.概念

數組(array)是一種最簡單的復合數據類型,它是有序數據的集合,數組中的每個元素具有相同的數據類型,可以用一個統一的數組名和不同的下標來確定數組中唯一的元素。根據數組的維度,可以將其分為一維數組、二維數組和多維數組等。

2.基本要素

一個數組由4個基本元素構成:數組名稱、數組元素、元素索引、數據類型。

數組的索引就相當于C語言中數組的下標,關于數組的長度可以用數組名.length求出。

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

3.數組的定義

關于數組的定義,其實有很多種定義方法,接下來,我會給你們介紹幾種定義數組的方法。

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

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


//第三種定義數組的方法:
int[] array3 = new int[10];//只是分配了內存,但是沒有進行賦值,默認值都是0,

//第四種定義數組的方法:
int[] array4;
array = new int[]{1,2,3};//一定要為數組符初值,不然編譯器會報錯,

對于沒有賦初值的數組,編譯器會自動賦值,以下表格是不同類型的數組,初值大小:

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

4.注意事項

  • 靜態(tài)初始化雖然沒有指定數組的長度,編譯器在編譯時會根據{}中元素個數來確定數組的長度。
  • 靜態(tài)初始化時, {}中數據類型必須與[]前數據類型一致。
  • 靜態(tài)初始化可以簡寫,省去后面的new T[]。T可以為任意數據類型。
  • 如果數組中存儲元素類型為引用類型,默認值為null。

二、數組的使用

1.對數組中的元素進行訪問

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

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

//當然也可以對數組中的元素進行修改,、
array[0]=111;
System.out.println(array[0]);//111

2.注意事項

(1)數組是一段連續(xù)的內存空間,因此支持隨機訪問,即通過下標訪問快速訪問數組中任意位置的元素。

(2)下標從0開始,介于[0, N)之間不包含N,N為元素個數,不能越界,否則會報出下標越界異常。

所以在訪問數組元素時一定不要越界?。?!

3.對數組的遍歷

對于什么是對數組的遍歷,就是將數組的元素全都訪問一遍,如將數組中的全部元素的打印一遍。

第一種數組遍歷方法:直接打印數組中的每一個元素

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]);

本方法對于元素個數較少的數組來說可以應用,但對于有幾十個元素的數組來說,太麻煩了,接下來為大家講解第二種方法。

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

Demo:

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

第三種數組遍歷的方法:采用foreach的方式

Demo:

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

foreach的語法格式:冒號右邊寫數組名,左邊寫由數組當中數據類型定義的變量。

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

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

Demo:

import java.util.Arrays;

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

注:要使用Arrays這個工具時要導入其專有的包!

三、數組在內存的存在形式

1.數組是一種引用變量

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

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

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

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

2了解引用變量(數組)

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)建一個數組array1,并初始化賦值為1,2,3,4,然后打印數組array1,接著申請另一款空間,用來創(chuàng)建array2,且array2=array1,說明兩個數組都指向同一塊空間,修改array2中的第二個元素也就相當于修改了array1中對應的元素。

3.注意事項

(1)一個引用不能同時指向多個對象例:

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

(3)

int[] array = 0;
/*這種寫法是錯誤的,因為0是一種基本數據類型,
 *而array是一種引用數據類型,如果將0改成null就不會錯。
 *即代表這個引用不指向任何對象
*/

注:null在Java中表示空引用,也就是一個不指向對象的引用,并不是0的意思。

四、數組的應用場景

1.用來保存數據

Demo:

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

2.數組作為方法的參數

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));

    }
}

代碼解釋:對func1方法進行解釋就行,func2同理

形參的指向改變不會影響實參的指向改變!??!

3.數組作為方法的返回值

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));
    }
}

五、數組的練習

小伙伴們,也可以直接去寫一下,再過來看示例代碼,增強自己的代碼能力。

1.數組轉成字符串

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);
    }
    
    
//打印結果為 [1,2,3,4,5,6]

2.數組的拷貝

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

下面是錯誤代碼?。?!

/*
        int[] array1 = {1,2,3};
        int[] array2 = array1;
*/
//這不是對數組的拷貝,因為沒有產生新的空間

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("復制之后的數組為:");
        System.out.println(Arrays.toString(array2));

    }
}

//最后輸出為:
  [1,2,3,4]
  復制之后的數組為:
  [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] 

顯然自己寫的方法沒有編譯器自帶的工具簡潔,但是不能說有了這些工具就可以不用寫代碼了,自己的能力還是要加強,這些工具只是幫我們減輕了負擔,但是原理還是要自己弄懂。

3.求數組的平均值

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

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);

    }
}

//最后結果:
  42.0

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

算法思路:

  • 將數組中相鄰元素從前往后依次進行比較,如果前一個元素比后一個元素大,則交換,一趟下來后最大元素就在數組的末尾
  • 依次從上上述過程,直到數組中所有的元素都排列好

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("排序之前的數組:");
        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];    //交換數據
                    array[i] = array[i+1];
                    array[i+1] = tmp;
                }
            }
        }
        System.out.println("排序之后的數組:");
        System.out.println(Arrays.toString(array));
    }
}

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

5.數組逆序

題目理解:就是給定一個數組,將其倒序輸出。

思路:

先定義兩個下標分別指向數組的第一個元素和最后一個元素,將數組中的第一個元素和最后一個元素交換位置,然后指向第一個元素的下標進行加加,指向最后一個元素的下標進行減減。

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("排序之前的數組:");
        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("排序之后的數組:");
        System.out.println(Arrays.toString(array));
    }
}

//運行結果:
排序之前的數組:
[1, 2, 3, 4, 5, 6]
排序之后的數組:
[6, 5, 4, 3, 2, 1]

六、二維數組

1.二維數組的定義

關于二維數組的定義有很多種方法,這里咱們介紹最常用的三種。

Demo:

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

 int[][] arr = new int[2][3];//定義一個3行4列的數組

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

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

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

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

以上就是關于二維數組最常見的定義方法?。?!

2.二維數組的打印

二維數組本質上也就是一維數組, 只不過每個元素又是一個一維數組.

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(" ");
        }
    }
}

//運行結果:
1 2  
3 4 5  
6 7 8 9 

由于二維數組的應用和一維數組并沒有太大的區(qū)別,所以,在這里不做介紹,學會如何定義二維數組就好。

總結

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

相關文章

  • Spring Boot拓展XML格式的請求和響應操作過程

    Spring Boot拓展XML格式的請求和響應操作過程

    在我們開發(fā)過程中,我們經常使用的參數絕大多少事HTML和JSON格式的請求和響應處理,但是我們在實際開發(fā)過程中,我們可能經歷一些,比如對于XML格式的請求,本文給大家介紹Spring Boot拓展XML格式的請求和響應,感興趣的朋友一起看看吧
    2023-10-10
  • java常用的加密解決方案分享

    java常用的加密解決方案分享

    這篇文章全面介紹了Java中加解密技術的應用,包括哈希函數、對稱加密、非對稱加密、消息認證碼和數字簽名等,它詳細解釋了每種技術的工作原理,并提供了相應的Java代碼示例,文章還強調了密鑰管理的重要性,并提出了在實際應用中遵循的最佳實踐
    2025-01-01
  • java使用poi生成excel的步驟

    java使用poi生成excel的步驟

    2010以上格式使用XSSFWorkBook對象, 2003格式使用HSSFWorkBook對象, 其他對象操作基本一樣,本文重點給大家介紹java使用poi生成excel的相關知識,感興趣的朋友一起看看吧
    2022-04-04
  • Lombok 的@StandardException注解解析

    Lombok 的@StandardException注解解析

    @StandardException 是一個實驗性的注解,添加到 Project Lombok 的 v__1.18.22 版本中,在本教程中,我們將使用 Lombok 的 @StandardException 注解自動生成異常類型類的構造函數,需要的朋友可以參考下
    2023-05-05
  • 詳解Spring如何解析占位符

    詳解Spring如何解析占位符

    Spring一直支持將屬性定義到外部的屬性的文件中,并使用占占位符的形式為使用"${}"包裝的屬性名稱,為了使用屬性占位符,我們必須配置一個PropertyPlaceholderConfigurer或PropertySourcesPlaceholderConfigurer實例,本文將介紹如何解析占位符
    2021-06-06
  • Mybatis中@Param注解的用法詳解

    Mybatis中@Param注解的用法詳解

    @Param注解的作用是給參數命名,參數命名后就能根據名字得到參數值,正確的將參數傳入sql語句中,下面這篇文章主要給大家介紹了關于Mybatis中@Param注解用法的相關資料,需要的朋友可以參考下
    2022-07-07
  • 設計模式之構建(Builder)模式 建造房子實例分析

    設計模式之構建(Builder)模式 建造房子實例分析

    構建模式主要用來針對復雜產品生產,分離部件構建細節(jié),以達到良好的伸縮性,考慮到設計模式來源于建筑學,因此舉一個建造房子的例子,需要的朋友可以參考下
    2012-12-12
  • Java8中CompletableFuture的用法全解

    Java8中CompletableFuture的用法全解

    這篇文章主要給大家介紹了關于Java8中CompletableFuture用法的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-01-01
  • activiti獲取流程圖實例

    activiti獲取流程圖實例

    這篇文章主要介紹了activiti獲取流程圖的方法,需要的朋友可以參考下
    2014-08-08
  • 使用Spring自定義注解實現任務路由的方法

    使用Spring自定義注解實現任務路由的方法

    本篇文章主要介紹了使用Spring自定義注解實現任務路由的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評論

斗六市| 景德镇市| 漳州市| 改则县| 饶阳县| 蓝田县| 玉树县| 平顶山市| 贺州市| 读书| 仪陇县| 汝州市| 雅江县| 库车县| 墨竹工卡县| 贵德县| 太康县| 莱芜市| 仙游县| 胶州市| 瑞安市| 阜城县| 孝昌县| 略阳县| 阳西县| 吉林省| 万年县| 酉阳| 赤峰市| 乌拉特前旗| 含山县| 临湘市| 隆尧县| 潞城市| 宝坻区| 双桥区| 台北县| 吴桥县| 收藏| 治县。| 呼图壁县|