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

新手初學(xué)Java數(shù)組

 更新時(shí)間:2021年07月07日 11:52:23   作者:Prpr君  
數(shù)組是相同類型數(shù)據(jù)的有序集合數(shù)組描述的是相同類型的若干個(gè)數(shù)據(jù),按照一定的先后次序排列組合而成。其中,每一個(gè)數(shù)據(jù)稱作一個(gè)數(shù)組元素,每個(gè)數(shù)組元素可以通過一個(gè)下標(biāo)來訪問它們數(shù)組的聲明創(chuàng)建

什么是數(shù)組

  • 數(shù)組是相同類型數(shù)據(jù)的有序集合
  • 數(shù)組描述的是相同類型的若干個(gè)數(shù)據(jù),按照一定的先后次序排列組合而成。
  • 其中,每一個(gè)數(shù)據(jù)稱作一個(gè)數(shù)組元素,每個(gè)數(shù)組元素可以通過一個(gè)下標(biāo)來訪問它們

數(shù)組的聲明創(chuàng)建

  • 首先必須聲明數(shù)組變量,才能在程序中使用數(shù)組。下面是聲明數(shù)組變量的語法:
dataType[] array;//例: int[] nums; 推薦使用這種寫法
或者
dataType array[];//例: int nums[];

使用new來創(chuàng)建數(shù)組的語法:

dataType[] array = new dataType[arraySize]//例 int[] nums = new int[10];

數(shù)組的元素是通過索引訪問的,數(shù)組索引從0開始。

獲取數(shù)組的長度:array.length

練習(xí):用循環(huán)給數(shù)組賦值1到10,并輸出數(shù)組的總和

public static void main(String[] args) {
        //創(chuàng)建一個(gè)數(shù)組
        int[] array = new int[10];
        //sum為總和
        int sum = 0;
        //循環(huán)給數(shù)組賦值
        for (int i = 1;i<=array.length;i++){
            array[i-1] = i;
        }
        //循環(huán)遍歷數(shù)組,把每位加到sum計(jì)算總和
        for (int j = 0;j<array.length;j++){
            sum = sum + array[j];
        }
        System.out.println("數(shù)組總和為:"+sum);
    }

內(nèi)存分析:

結(jié)合以上練習(xí)和這張簡單的內(nèi)存分析思維導(dǎo)圖來簡單分析一下數(shù)組是如何生成在java內(nèi)存的?

三種初始化狀態(tài)

  • 靜態(tài)初始化
int[] a = {1,2,3};
Man[] mans = {new Man(1,1)}//Man是類名
  • 動(dòng)態(tài)初始化
int[] a = new int[2];
a[0] = 1;
a[1] = 2;

數(shù)組的默認(rèn)初始化

動(dòng)態(tài)初始化包含了默認(rèn)初始化。數(shù)組是引用類型,它的元素相當(dāng)于類的實(shí)例變量,因此數(shù)組一經(jīng)分配空間,其中的每個(gè)元素也被按照實(shí)例變量同樣的方式被隱式初始化。

int[] a = new int[2];//可以理解為一但通過new實(shí)例化了,數(shù)組的每個(gè)元素也同樣的被實(shí)例化位默認(rèn)值存在堆的空間里

數(shù)組的四個(gè)基本特點(diǎn)

  • 其長度是確定的。數(shù)組一旦被創(chuàng)建,它的大小就是不可以改變的。
  • 其元素必須是相同類型,不允許出現(xiàn)混合類型。
  • 數(shù)組中的元素可以是任何數(shù)據(jù)類型,包括基本類型和引用類型。
  • 數(shù)組變量屬引用類型,數(shù)組也可以看成是對(duì)象,數(shù)組中的每個(gè)元素相當(dāng)于該對(duì)象的成員變量。數(shù)組本身就是對(duì)象,Java中對(duì)象是在堆中的,因此數(shù)組無論保存原始類型還是其他對(duì)象類型,數(shù)組對(duì)象本身是在堆中的。

數(shù)組的使用

For-Each循環(huán)

public static void main(String[] args) {
        int[] arrays = {1,3,5,7,9};
        //JDK1.5以上可以使用,但是沒有下標(biāo)
        for (int array : arrays) {
            System.out.println(array);
        }
    }

數(shù)組作方法入?yún)?/p>

public static void main(String[] args) {
        int[] arrays = {2,4,6,8,10};
        printArray(reverse(arrays));//輸出10 8 6 4 2
    }
    //打印數(shù)組元素
    public static void printArray(int[] arrays){
        for(int i = 0; i < arrays.length; i++){
            System.out.print(arrays[i]+" ");
        }
    }

數(shù)組作返回值

 public static void main(String[] args) {
        int[] arrays = {2,4,6,8,10};
        //使用for-each遍歷出反轉(zhuǎn)后的數(shù)組
        for(int array : reverse(arrays)){
            System.out.print(array+" ");
        }
    }
    //反轉(zhuǎn)數(shù)組,從數(shù)組最后一個(gè)元素到第一個(gè)元素
    public static int[] reverse(int[] arrays){
        int[] result = new int[arrays.length];
        for (int i = 0,j=arrays.length-1; i < arrays.length; i++,j--) {
            result[j] = arrays[i];
        }
        return result;
    }

多維數(shù)組

多維數(shù)組可以看成是數(shù)組的數(shù)組,比如二維數(shù)組就是一個(gè)特殊的一維數(shù)組,其每一個(gè)元素都是一個(gè)一維數(shù)組。

二維數(shù)組

int a[][] = new int[3][2]//可以看作一個(gè)3行2列的數(shù)組來理解

例:創(chuàng)建并打印二維數(shù)組的所有元素

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

Arrays類

  • 數(shù)組的工具類java.util.Arrays
  • 由于數(shù)組對(duì)象本身并沒有什么方法可以供我們調(diào)用,但API中提供了一個(gè)工具類Arrays供我們使用,從而可以對(duì)數(shù)據(jù)對(duì)象進(jìn)行一些基本的操作。
  • Arrays類中的方法都是static修飾的靜態(tài)方法,在使用的時(shí)候可以直接使用類名進(jìn)行調(diào)用,而"不用"使用對(duì)象來調(diào)用(注意:是"不用”而不是"不能")

常用功能:

返回指定數(shù)組的內(nèi)容的字符串表示形式,通過toString方法。

public static void main(String[] args) {
        int[] arrays = {9,5,8,7,100,365,277,25,64};
		System.out.println(Arrays.toString(arrays));
    }

將指定的int值分配給指定的int數(shù)組的每個(gè)元素:通過fill方法。

public static void main(String[] args) {
        int[] arrays = {9,5,8,7,100,365,277,25,64};
        Arrays.fill(arrays,0);//給數(shù)組里面所有元素替換為0
        System.out.println(Arrays.toString(arrays));
        //輸出[0, 0, 0, 0, 0, 0, 0, 0, 0]
        int[] arr = {9,5,8,7,100,365,277,25,64};
//      a - 要填充的數(shù)組
//      fromIndex - 要用指定值填充的第一個(gè)元素(包括)的索引
//      toIndex - 要用指定值填充的最后一個(gè)元素(排除)的索引
//      val - 要存儲(chǔ)在數(shù)組的所有元素中的值
        Arrays.fill(arr,0,5,9);//給數(shù)組里面所有下標(biāo)范圍替換為9
        System.out.println(Arrays.toString(arr));
    }

對(duì)數(shù)組排序:通過sort方法,按升序。

public static void main(String[] args) {
        int[] arrays = {9,5,8,7,100,365,277,25,64};
        Arrays.sort(arrays);//數(shù)組進(jìn)行排序:升序
        System.out.println(Arrays.toString(arrays));
        //輸出[5, 7, 8, 9, 25, 64, 100, 277, 365]
    }

比較數(shù)組:通過equals方法比較數(shù)組中元素值是否相等。

public static void main(String[] args) {
        int[] arrays = {9,5,8,7,100,365,277,25,64};
        int[] arrays2 = {9,5,8,7,100,365,277,25,64};
        boolean flag = Arrays.equals(arrays, arrays2);
        System.out.println("arrays和arrays2中的元素比較結(jié)果:"+flag);
    }

冒泡排序

冒泡排序算法的運(yùn)作:

  • 比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。
  • 對(duì)每一對(duì)相鄰元素作同樣的工作,從開始第一對(duì)到結(jié)尾的最后一對(duì)。比較完最后一對(duì)則最后的元素會(huì)是最大的數(shù)。
  • 針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。
  • 持續(xù)每次對(duì)越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。

代碼示例:

public static void main(String[] args) {
        int[] arrays = {9,5,8,7,100,365,277,25,64};
        sort(arrays);
    }
    //冒泡排序:比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)的值
    public static void sort(int array[]){
        //temp是臨時(shí)變量,用于比較的值進(jìn)行交換
        int temp = 0;
        for (int i = 0; i < array.length-1; i++) {
            for (int j = 0; j < array.length-1-i; j++) {
                if(array[j]>array[j+1]){
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(array));
    }

以上代碼通過可以通過斷點(diǎn)Debug發(fā)現(xiàn),排序過程中,執(zhí)行完最后的排序后,雖然數(shù)據(jù)已全部排序完備,但程序無法判斷是否完成排序

為了解決這一不足,可設(shè)置一個(gè)標(biāo)志位flag來進(jìn)行優(yōu)化,將其初始值設(shè)置為false,表示被排序的表是一個(gè)無序的表,每一次排序開始前設(shè)置flag值為false,在進(jìn)行數(shù)據(jù)交換時(shí),修改flag為非true。在新一輪排序開始時(shí),檢查此標(biāo)志,若此標(biāo)志為false,表示上一次沒有做過交換數(shù)據(jù),則結(jié)束排序;否則進(jìn)行排序;

例:

public static void main(String[] args) {
        int[] arrays = {9,5,8,7,100,365,277,25,64};
        sort(arrays);
    }
    public static void sort(int array[]){
        //temp是臨時(shí)變量,用于比較的值進(jìn)行交換
        int temp = 0;
        for (int i = 0; i < array.length-1; i++) {
            boolean flag = false;
            for (int j = 0; j < array.length-1-i; j++) {
                if(array[j]>array[j+1]){
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                    flag = true;
                }
            }
            if(flag==false){
                break;
            }
        }
        System.out.println(Arrays.toString(array));
    }

稀疏數(shù)組

  • 當(dāng)一個(gè)數(shù)組中大部分元素為0,或者為同一值的數(shù)組時(shí),可以使用稀疏數(shù)組來保存該數(shù)組。
  • 稀疏數(shù)組的處理方式是:
    • 記錄數(shù)組一共有幾行幾列,有多少個(gè)不同值
    • 把具有不同值的元素和行列及值記錄在一個(gè)小規(guī)模的數(shù)組中,從而縮小程序的規(guī)模
  • 如下圖:左邊是原始數(shù)組,右邊是稀疏數(shù)組

例:一個(gè)有11行11列的五子棋盤,下了黑子和白字和沒下棋子的地方我們可以用不同數(shù)字表示

(0:無)(1:黑)(2:白)

因?yàn)樵摱S數(shù)組的很多值是默認(rèn)值0,因此記錄了很多沒有意義的數(shù)據(jù)。我們可以用稀疏數(shù)組來優(yōu)化壓縮

public static void main(String[] args) {
        //1.創(chuàng)建一個(gè)二維數(shù)組array1  有11行11列 (0:無 1:黑 2:白)
        int[][] array1 = new int[11][11];
        //根據(jù)示例圖表示,1在第二行第三列,2在第三行第四列
        array1[1][2] = 1;
        array1[2][3] = 2;
        //輸出原始數(shù)組
        System.out.println("輸出原始數(shù)組");
        for(int[] ints : array1){
            for (int anInt : ints){
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        System.out.println("==========================================");
        //2.獲取有效值的個(gè)數(shù)
        int sum = 0;//sum拿來記錄有效個(gè)數(shù)
        //11為二維數(shù)組的行數(shù)
        for (int i = 0; i < 11; i++) {
            //11為二維數(shù)組的列數(shù)
            for (int j = 0; j <11 ; j++) {
                //如果幾行幾列的值不是0,則有效值個(gè)數(shù)+1
                if(array1[i][j]!=0){
                    sum++;
                }
            }
        }
        System.out.println("有效值的個(gè)數(shù):"+sum);
        //3.創(chuàng)建一個(gè)代表稀疏數(shù)組的數(shù)組array2
        //sum+1中的+1是第一行要存放總共幾行幾列幾個(gè)有效值的數(shù)據(jù),3列是固定存放行、列、值
        int[][] array2 = new int[sum+1][3];
        array2[0][0] = 11;//總共多少行
        array2[0][1] = 11;//總共多少列
        array2[0][2] = sum;//有效值個(gè)數(shù)
        //4.遍歷二維數(shù)組,將非0的值存放在稀疏數(shù)組中
        int count = 0;//記錄行數(shù)
        for (int i = 0; i < array1.length ; i++) {
            for (int j = 0; j < array1[i].length; j++) {
                if (array1[i][j]!=0){
                    count++;//查找到一個(gè)有效值就+1行記錄在稀疏數(shù)組array2中
                    array2[count][0] = i;//橫坐標(biāo)
                    array2[count][1] = j;//縱坐標(biāo)
                    array2[count][2] = array1[i][j];//值
                }
            }
        }
        System.out.println("輸出稀疏數(shù)組");
        System.out.println("行"+"\t"+"列"+"\t"+"值");
        for (int i = 0; i < array2.length; i++) {
            System.out.println(array2[i][0]+"\t"
                                +array2[i][1]+"\t"
                                +array2[i][2]+"\t");
        }
        System.out.println("==========================================");
        //5.把稀疏數(shù)組array2還原為原始數(shù)組array3
        //稀疏數(shù)組中array2[0][0]和[0][1]固定存放是總共幾行幾列,array2是11行11列
        int[][] array3 = new int[array2[0][0]][array2[0][1]];
        //給其中的元素還原它的值,注意i要從1開始,因?yàn)閍rray2[0]行存取的是幾行幾列
        for (int i = 1; i < array2.length; i++) {
            //0是int數(shù)組中的默認(rèn)值,所以只需要在有效值的位置還原
            array3[array2[i][0]][array2[i][1]] = array2[i][2];
        }
        //打印array3
        System.out.println("輸出還原數(shù)組");
        for(int[] ints : array3){
            for (int anInt : ints){
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
    }

結(jié)果:

總結(jié)

本篇文章就到這里了,希望能夠幫助到你,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 淺談java線程狀態(tài)與線程安全解析

    淺談java線程狀態(tài)與線程安全解析

    本文主要介紹了淺談java線程狀態(tài)與線程安全解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 詳解Mybatis分頁插件 - 示例代碼

    詳解Mybatis分頁插件 - 示例代碼

    這篇文章主要介紹了詳解Mybatis分頁插件 - 示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧。
    2016-12-12
  • Java 8函數(shù)式接口Function BiFunction DoubleFunction區(qū)別

    Java 8函數(shù)式接口Function BiFunction DoubleFunction

    這篇文章主要為大家介紹了Java 8函數(shù)式接口Function BiFunction DoubleFunction區(qū)別示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Java異常分類及統(tǒng)一處理詳解

    Java異常分類及統(tǒng)一處理詳解

    這篇文章主要為大家詳細(xì)介紹了Java異常分類及統(tǒng)一處理,SpringMVC處理異常支持ajax,web.xml配置異常,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Java File類常用方法與文件過濾器詳解

    Java File類常用方法與文件過濾器詳解

    Java File類以抽象的方式代表文件名和目錄路徑名。該類主要用于文件和目錄的創(chuàng)建、文件的查找和文件的刪除等。File對(duì)象代表磁盤中實(shí)際存在的文件和目錄。本篇文章我們來講解File類的常用方法與文件過濾器
    2022-04-04
  • MybatisPlus開啟、關(guān)閉二級(jí)緩存方法

    MybatisPlus開啟、關(guān)閉二級(jí)緩存方法

    本文主要介紹了MybatisPlus開啟、關(guān)閉二級(jí)緩存方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Spring MVC中自定義攔截器的實(shí)例講解

    Spring MVC中自定義攔截器的實(shí)例講解

    下面小編就為大家?guī)硪黄猄pring MVC中自定義攔截器的實(shí)例講解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • java如何替換word/doc文件中的內(nèi)容

    java如何替換word/doc文件中的內(nèi)容

    docx格式的文件本質(zhì)上是一個(gè)XML文件,只要用占位符在指定的地方標(biāo)記,然后替換掉標(biāo)記出的內(nèi)容,這篇文章主要介紹了java替換word/doc文件中的內(nèi)容,需要的朋友可以參考下
    2023-06-06
  • 聊聊在Servlet中怎么上傳文件

    聊聊在Servlet中怎么上傳文件

    很多朋友不清楚在Servlet中怎么上傳文件,談到這個(gè)問題,首先需要我們掌握開發(fā)servlet的步驟,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-05-05
  • 詳解Java中Array和ArrayList的比較和轉(zhuǎn)換

    詳解Java中Array和ArrayList的比較和轉(zhuǎn)換

    在 Java 編程中,arrays 和 arraylists 都是基本的數(shù)據(jù)結(jié)構(gòu),用來存放數(shù)據(jù)集合,雖然兩者的用途一樣,但是它們的特點(diǎn)極大地影響應(yīng)用的性能和靈活性,本文探討 arrays 和 arraylists 的重要特性,它們各自的強(qiáng)項(xiàng)和弱點(diǎn),,需要的朋友可以參考下
    2023-08-08

最新評(píng)論