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

Java數(shù)組從定義到操作全解析

 更新時(shí)間:2025年11月25日 09:14:42   作者:H的代碼  
這篇文章詳細(xì)介紹了Java數(shù)組的概念、聲明、創(chuàng)建、訪問(wèn)、初始化、邊界、基礎(chǔ)操作以及Arrays類(lèi)的常用方法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

數(shù)組概述

數(shù)組的定義

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

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

  • 首先必須聲明數(shù)組變量,才能在程序中使用數(shù)組。下面是聲明數(shù)組變量(定義)的語(yǔ)法:
dataType[] arrayRefvar;     //首選的方法
或
dataType arrayRefVar[];     //效果相同,但不是首選方法
  • Java語(yǔ)言使用new操作符來(lái)創(chuàng)建數(shù)組,語(yǔ)法如下:
dataType[] arrayRefVar = new dataType[arraySize];
//                          數(shù)組范圍[0-arraySize)
  • 數(shù)組的元素時(shí)通過(guò)索引訪問(wèn)的,數(shù)組索引從0開(kāi)始
  • 獲取數(shù)組長(zhǎng)度:
arrays.length
  • 計(jì)算所有元素的和:
public class Demo01 {
    public static void main(String[] args) {
        //基本數(shù)據(jù)類(lèi)型:變量的類(lèi)型 變量的名稱(chēng) = 變量的值
        //數(shù)組類(lèi)型:變量類(lèi)型[] 數(shù)組名 = new 變量類(lèi)型[數(shù)組大小]
        int[] nums;     //1.聲明一個(gè)數(shù)組
        nums = new int[3];     //2.創(chuàng)建一個(gè)數(shù)組
        //int[] nums = new int[10]; //1.2.等價(jià)于
        //3.給數(shù)組元素中賦值
        nums[0] = 1;
        nums[1] = 2;
        nums[2] = 3;
        System.out.println(nums);    //數(shù)組的地址
        //計(jì)算所有元素的和
        int sum = 0;
        //獲取數(shù)組長(zhǎng)度:array.length
        for (int i = 0; i <nums.length ; i++) {
            sum = sum + nums[i];
        }
        System.out.println("數(shù)組和為:"+sum);
    }
}

內(nèi)存分析

數(shù)組三種初始化

靜態(tài)初始化

int[] a = {1,2,3};//靜態(tài)初始化:創(chuàng)建 + 賦值;基本類(lèi)型
Man[] mans = {new Man(1,1), new Man(2,2)};//引用類(lèi)型

動(dòng)態(tài)初始化(包含默認(rèn)初始化)

int[] a = new int[2];//聲明+初始化
a[0] = 1;   //賦值
a[1] = 2;   //賦值

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

  • 數(shù)組是引用類(lèi)型,它的元素相當(dāng)于類(lèi)的實(shí)例變量,因此數(shù)組一經(jīng)分配空間,其中的每個(gè)元素也被按照實(shí)例變量同樣的方式被隱式初始化。
public class Demo02 {
    public static void main(String[] args) {
        //靜態(tài)初始化:創(chuàng)建 + 賦值
        int[] a = {1,2,3,4,5,6,7,8,9};
        System.out.println(a[0]);
        System.out.println("------------------");
        //動(dòng)態(tài)初始化:包含默認(rèn)初始化
        int[] b = new int[10];
        b[0] = 10;  //對(duì)數(shù)組0號(hào)位置賦值
        b[1] = 10;  //對(duì)數(shù)組1號(hào)位置賦值
        //遍歷數(shù)組b,除了0、1號(hào)位,其余位被默認(rèn)初始化
        for (int i : b) {
            System.out.print(i+"\t");
        }
    }
}

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

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

數(shù)組邊界

  • 下標(biāo)的合法區(qū)間:[0,length-1],如果越界就會(huì)報(bào)錯(cuò)
public static void main(String[] args){
    int[] a = new int[2];
    System.out.println(a[2]);
}
  • ArrayIndexOutOfBoundsException 數(shù)組下標(biāo)越界異常

一維數(shù)組的基礎(chǔ)操作

public class Demo03 {
    public static void main(String[] args) {
        int[] arrays = {1,2,3,4,5};
        //打印全部的數(shù)組元素
        for (int i = 0; i < arrays.length; i++) {
            System.out.println(arrays[i]);
        }
        System.out.println("----------------");
        //計(jì)算所有元素的和
        int sum = 0;
        for (int i = 0; i < arrays.length; i++) {
            sum += arrays[i];
        }
        System.out.println("數(shù)組的元素和為:"+sum);
        System.out.println("----------------");
        //查找數(shù)組內(nèi)元素的最大值
        int max = arrays[0];
        for (int i = 0; i < arrays.length; i++) {
            if (arrays[i]>max){
                max = arrays[i];
            }
        }
        System.out.println("數(shù)組內(nèi)元素的最大值為:"+max);
    }
}
?

總結(jié):

  • 數(shù)組是相同數(shù)據(jù)類(lèi)型(數(shù)據(jù)類(lèi)型可以為任意類(lèi)型)的有序集合
  • 數(shù)組也是對(duì)象。數(shù)組元素相當(dāng)于對(duì)象的成員變量
  • 數(shù)組長(zhǎng)度是確定的,不可變的。如果越界,會(huì)報(bào)錯(cuò)(ArrayIndexOutOfBoundsException)

數(shù)組使用

  • Java從JDK 5開(kāi)始引入: for-each(增強(qiáng)型for循環(huán))
for(元素類(lèi)型 變量名 : 遍歷對(duì)象) {
    // 循環(huán)體
}
  • 數(shù)組做方法入?yún)ⅲ▊鲾?shù)組打?。?/li>
  • 數(shù)組作返回值(反轉(zhuǎn)數(shù)組)
public class Demo04 {
    public static void main(String[] args) {
        //例題:將數(shù)組反轉(zhuǎn)并輸出
        int[] arrays = {1,2,3,4,5};
        //ava從JDK 5開(kāi)始引入for-each,缺點(diǎn):不能通過(guò)下標(biāo)訪問(wèn)元素進(jìn)行修改
//        for (int array : arrays) {
//            System.out.println(array);
//        }
//        printArray(arrays);
        int[] reverse = reverse(arrays);    //數(shù)組作返回值
        printArray(reverse);    //數(shù)組做方法入?yún)?
    }
    //打印數(shù)組元素
    public static void printArray(int[] arrays){
        for (int i = 0; i < arrays.length; i++) {
            System.out.print(arrays[i]+" ");
        }
    }
    //反轉(zhuǎn)數(shù)組
    public static int[] reverse(int[] arrays){
        int[] result = new int[arrays.length];
        //反轉(zhuǎn)操作
        for (int i = 0,j=result.length-1; i < arrays.length; i++,j--) {
            result[j] = arrays[i];
        }
        return result;
    }
}

多維數(shù)組

  • 多維數(shù)組可以看成是數(shù)組的數(shù)組,比如二維數(shù)據(jù)就是一個(gè)特殊的一維數(shù)組,其每一個(gè)數(shù)組元素又都是一個(gè)一維數(shù)組。
  • 二維數(shù)組
int a[][] = new int[2][5];
  • 解析:以上二維數(shù)組a可以看成一個(gè)兩行五列的數(shù)組。

二維數(shù)組的基礎(chǔ)操作

public class Demo05 {
    public static void main(String[] args) {
        int[][] array = {{1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15}};
        //1.遍歷二維數(shù)組
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.println(array[i][j]);
            }
        }
        System.out.println("-------------------");
        //2.取二維數(shù)組的所有元素和
        int sum = 0;
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                sum += array[i][j];
            }
        }
        System.out.println("數(shù)組的所有元素和為:"+sum);
        System.out.println("-------------------");
        //3.取二維數(shù)組中元素的最大值
        int result = 0;
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if (array[i][j] > result){
                    result = array[i][j];
                }
            }
        }
        System.out.println("二維數(shù)組中元素的最大值為:"+result);
        System.out.println("-------------------");
        //4.打印二維數(shù)組的第一行數(shù)據(jù)
        //方法一:
        System.out.println(array[0]);
        System.out.println(array[0][0]);
        System.out.println(array[0][1]);
        System.out.println(array[0][2]);
        System.out.println("-------------------");
        //方法二:
        printArray(array[0]);
    }
    public static void printArray(int[] arrays){
        for (int i = 0; i < arrays.length; i++) {
            System.out.print(arrays[i]+" ");
        }
    }
}

Arrays類(lèi)

  • 數(shù)組的工具類(lèi)Java.util.Arrays
  • 由于數(shù)組對(duì)象本身并沒(méi)有什么方法可以供我們調(diào)用,但API中提供了一個(gè)工具類(lèi)Arrays供我們使用,從而可以對(duì)數(shù)據(jù)對(duì)象進(jìn)行一些基本的操作。
  • Arrays類(lèi)中的方法都是static修飾的靜態(tài)方法,在使用的時(shí)候可以直接使用類(lèi)名進(jìn)行調(diào)用,而“不用”使用對(duì)象來(lái)調(diào)用(注意:是“不用”而不是“不能”)
  • 具有以下常用功能:
    • 給數(shù)據(jù)賦值:通過(guò)fill方法。
    • 對(duì)數(shù)組排序:通過(guò)sort方法,按升序。
    • 比較數(shù)組:通過(guò)equals方法比較數(shù)組中元素值是否相等。
    • 查找數(shù)組元素:通過(guò)binarySearch方法能對(duì)排序號(hào)的數(shù)據(jù)進(jìn)行二分查找法操作。
import java.util.Arrays;
public class Demo06 {
    public static void main(String[] args) {
        int[] a = {45,132,864,16,4,6,889,456,2};
        System.out.println(a); //[I@1b6d3586
        //用Arrays提供的方法(toString)打印數(shù)組的元素
        System.out.println(Arrays.toString(a));
        //通過(guò)自己創(chuàng)建的方法(printArray)來(lái)打印數(shù)組的元素
        printArray(a);
        //-----------------------------------
        System.out.println();
        //用Arrays提供的方法對(duì)數(shù)組進(jìn)行排序后輸出
        Arrays.sort(a); //對(duì)數(shù)組進(jìn)行排序:默認(rèn)升序
        System.out.println(Arrays.toString(a));
        //-----------------------------------
        //用Arrays提供的方法對(duì)數(shù)組進(jìn)行填充
        Arrays.fill(a,0);   //數(shù)組填充
        System.out.println(Arrays.toString(a));
        Arrays.fill(a,2,4,1);//對(duì)數(shù)組中的[2,4)位進(jìn)行填充
        System.out.println(Arrays.toString(a));
    }
    public static void printArray(int[] a){
        for (int i = 0; i < a.length; i++) {
            if (i==0){
                System.out.print("[");
            }
            if (i==a.length-1){
                System.out.print(a[i]+"]");
            }else {
                System.out.print(a[i]+", ");
            }
        }
    }
}

例題:冒泡排序

  • 八大排序:直接插入排序、希爾排序、簡(jiǎn)單選擇排序、堆排序、冒泡排序、快速排序、歸并排序、基數(shù)排序;冒泡排序是最出名的排序算法之一;
  • 倆層循環(huán),外層冒泡輪數(shù),里層依次進(jìn)行倆數(shù)之間的比較
  • 冒泡排序算法時(shí)間復(fù)雜度是O(n^2)
import java.util.Arrays;
public class Demo07 {
    public static void main(String[] args) {
        /*
            冒泡排序:思路
            1.比較數(shù)組中,兩個(gè)相鄰的元素,如果第一個(gè)數(shù)比第二個(gè)數(shù)大,我們就交換他們的位置
            2.每一次比較,都會(huì)產(chǎn)生出一個(gè)最大或者最小的數(shù)字
            3.下一輪則可以少一次排序(array.length-1-i)
            4.依次循環(huán),直到結(jié)束!
        */
        int[] a = {2,6,13,57,87,64,135,6,5};
        int[] sort = sort(a);
        System.out.println(Arrays.toString(sort));
    }
    public static int[] sort(int[] array){
        //臨時(shí)變量
        int temp = 0;
        //外層循環(huán),判斷數(shù)組需要進(jìn)行多少次
        for (int i = 0; i < array.length-1; i++) {
            //內(nèi)層循環(huán),依次比較相鄰的兩個(gè)數(shù),如果第一個(gè)數(shù)比第二個(gè)數(shù)大,則交換位置(每一輪確定一個(gè)最大值)
            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;
                }
            }
        }
        return array;
    }
}

優(yōu)化冒泡排序

import java.util.Arrays;
public class Demo08 {
    public static void main(String[] args) {
        //Demo07冒泡排序優(yōu)化
        /*
            冒泡排序
            1.比較數(shù)組中,兩個(gè)相鄰的元素,如果第一個(gè)數(shù)比第二個(gè)數(shù)大,我們就交換他們的位置
            2.每一次比較,都會(huì)產(chǎn)生出一個(gè)最大或者最小的數(shù)字
            3.下一輪則可以少一次排序(array.length-1-i)
            4.依次循環(huán),直到結(jié)束!
        */
        int[] a = {2,6,13,57,87,64,135,6,5};
        int[] sort = sort(a);
        System.out.println(Arrays.toString(sort));
    }
    public static int[] sort(int[] array){
        //臨時(shí)變量
        int temp = 0;
        //外層循環(huán),判斷數(shù)組需要進(jìn)行多少次
        for (int i = 0; i < array.length-1; i++) {
            boolean flag = false;//通過(guò)flag標(biāo)志位減少?zèng)]有意義的比較
            //內(nèi)層循環(huán),依次比較相鄰的兩個(gè)數(shù),如果第一個(gè)數(shù)比第二個(gè)數(shù)大,則交換位置(每一輪確定一個(gè)最大值)
            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;    //進(jìn)行了換位flag則變成true
                }
            }
            //沒(méi)有進(jìn)入內(nèi)循環(huán)判斷,說(shuō)明該序列已經(jīng)是有序的了,則可以跳出循環(huán)
            if (flag==false){
                break;
            }
        }
        return array;
    }
}

到此這篇關(guān)于Java數(shù)組詳解:從定義到操作全解析的文章就介紹到這了,更多相關(guān)java數(shù)組定義內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot面試突擊之過(guò)濾器和攔截器區(qū)別詳解

    SpringBoot面試突擊之過(guò)濾器和攔截器區(qū)別詳解

    過(guò)濾器(Filter)和攔截器(Interceptor)都是基于?AOP(Aspect?Oriented?Programming,面向切面編程)思想實(shí)現(xiàn)的,用來(lái)解決項(xiàng)目中某一類(lèi)問(wèn)題的兩種“工具”,但二者有著明顯的差距,接下來(lái)我們一起來(lái)看
    2022-10-10
  • Java利用反射獲取object的屬性和值代碼示例

    Java利用反射獲取object的屬性和值代碼示例

    這篇文章主要介紹了Java利用反射獲取object的屬性和值代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Java8中字符串處理庫(kù)strman-java的使用示例

    Java8中字符串處理庫(kù)strman-java的使用示例

    除了Java本身的字符串處理方式外,我們還可以使用Apache Common Langs里的StringUtils來(lái)簡(jiǎn)化String的操作。但以上兩種方式對(duì)于我們?nèi)粘>幊讨凶钊菀着龅降淖址幚韥?lái)說(shuō),仍然顯得有些不足。所以這篇文章給大家介紹Java8中字符串處理庫(kù)strman-java的使用。
    2016-09-09
  • 一篇文章帶你入門(mén)java算術(shù)運(yùn)算符(加減乘除余,字符連接)

    一篇文章帶你入門(mén)java算術(shù)運(yùn)算符(加減乘除余,字符連接)

    這篇文章主要介紹了Java基本數(shù)據(jù)類(lèi)型和運(yùn)算符,結(jié)合實(shí)例形式詳細(xì)分析了java基本數(shù)據(jù)類(lèi)型、數(shù)據(jù)類(lèi)型轉(zhuǎn)換、算術(shù)運(yùn)算符、邏輯運(yùn)算符等相關(guān)原理與操作技巧,需要的朋友可以參考下
    2021-08-08
  • Java實(shí)現(xiàn)OTP(動(dòng)態(tài)口令)服務(wù)

    Java實(shí)現(xiàn)OTP(動(dòng)態(tài)口令)服務(wù)

    OTP是一種動(dòng)態(tài)生成的短時(shí)有效密碼,用于身份驗(yàn)證,通常在登錄或執(zhí)行敏感操作時(shí)提供額外的安全保障,本文主要介紹了Java實(shí)現(xiàn)OTP(動(dòng)態(tài)口令)服務(wù),感興趣的可以了解一下
    2025-03-03
  • spring boot使用i18n時(shí)properties文件中文亂碼問(wèn)題的解決方法

    spring boot使用i18n時(shí)properties文件中文亂碼問(wèn)題的解決方法

    這篇文章主要介紹了spring boot使用i18n時(shí)properties文件中文亂碼問(wèn)題的解決方法,需要的朋友可以參考下
    2017-11-11
  • Java?synchronized同步關(guān)鍵字工作原理

    Java?synchronized同步關(guān)鍵字工作原理

    synchronized作為Java程序員最常用同步工具,很多人卻對(duì)它的用法和實(shí)現(xiàn)原理一知半解,以至于還有不少人認(rèn)為synchronized是重量級(jí)鎖,性能較差,盡量少用。但不可否認(rèn)的是synchronized依然是并發(fā)首選工具,本文就來(lái)詳細(xì)講講
    2023-02-02
  • SpringBoot動(dòng)態(tài)導(dǎo)出word文檔實(shí)整教程(復(fù)制即可使用)

    SpringBoot動(dòng)態(tài)導(dǎo)出word文檔實(shí)整教程(復(fù)制即可使用)

    在我們做項(xiàng)目的時(shí)候會(huì)需要把數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出到word當(dāng)中,下面這篇文章主要給大家介紹了關(guān)于SpringBoot動(dòng)態(tài)導(dǎo)出word文檔實(shí)整教程的相關(guān)資料,文中的代碼復(fù)制即可使用,需要的朋友可以參考下
    2023-06-06
  • java == 引發(fā)的線上異常詳解

    java == 引發(fā)的線上異常詳解

    這篇文章主要介紹了java == 引發(fā)的線上異常,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-09-09
  • SpringBoot集成shiro,MyRealm中無(wú)法@Autowired注入Service的問(wèn)題

    SpringBoot集成shiro,MyRealm中無(wú)法@Autowired注入Service的問(wèn)題

    今天小編就為大家分享一篇關(guān)于SpringBoot集成shiro,MyRealm中無(wú)法@Autowired注入Service的問(wèn)題,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03

最新評(píng)論

克什克腾旗| 清镇市| 马山县| 蚌埠市| 徐闻县| 涿鹿县| 安国市| 定襄县| 玉龙| 信丰县| 曲阜市| 龙里县| 札达县| 安徽省| 永年县| 琼结县| 武宁县| 阳曲县| 兴海县| 凌海市| 山丹县| 宽城| 清苑县| 宜都市| 连城县| 乌拉特前旗| 迁安市| 岑巩县| 集安市| 四会市| 高雄市| 万安县| 合江县| 阜康市| 东莞市| 无为县| 威远县| 河曲县| 望谟县| 安多县| 略阳县|