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

從基礎(chǔ)學(xué)java--數(shù)組

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

Java數(shù)組

1、數(shù)組的定義

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

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

首先必須聲明數(shù)組變量,才能在程序中使用數(shù)組。

Java語(yǔ)言使用new操作符來(lái)創(chuàng)建數(shù)組,語(yǔ)法如下

dataType[] arrayRefVar; //首選
dataType arrayRefVar[]; //效果相同,但不是首選

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

dataType[] arrayRefVar = new dataType[arraySize]; //int[] nums=new int[10]

獲取數(shù)組長(zhǎng)度:arrays.length

int[] nums; //1.聲明一個(gè)數(shù)組
nums = new int[3]; //2.創(chuàng)建一個(gè)數(shù)組
//3.給數(shù)組元素賦值
nums[0]=1;
nums[1]=2;
nums[2]=3;
for (int num : nums) { //打印數(shù)組所有元素
    System.out.println(num);
}

1.2、內(nèi)存分析

在這里插入圖片描述

在這里插入圖片描述

1.3、數(shù)組的三種初始化

靜態(tài)初始化

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

動(dòng)態(tài)初始化

//包含默認(rèn)初始化
int[] a=new int[2]; //默認(rèn)值為0
a[0]=1;
a[1]=2;

默認(rèn)初始化

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

1.4、 數(shù)組的基本特點(diǎn)

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

1.5、數(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]);
}
ArraylndexOutOfBoundsException:數(shù)組下標(biāo)越界異常!

小結(jié):

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

2、數(shù)組的使用

2.1、For-Each循環(huán)

int[] arrays = {1,2,3,4,5};
//打印全部的數(shù)組元素 JDK1.5 沒有下標(biāo)
for (int array : arrays) {
    System.out.println(array);
}

2.2、數(shù)組作方法入?yún)?/h4>
//打印數(shù)組元素
public static void printArray(int[] a){
    for (int i = 0; i < a.length; i++) {
        System.out.print(a[i]+" ");
    }
}

2.3、數(shù)組作返回值

//反轉(zhuǎn)數(shù)組
public static int[] reverse(int[] arrays){
    int[] result = new int[arrays.length];
    //反轉(zhuǎn)的操作
    for (int i = 0; i < arrays.length; i++) {
        result[i] = arrays[arrays.length-i-1];
    }
    return result;
}

3、多維數(shù)組

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

int arr[][] = new int[3][2]; //二維數(shù)組,三行兩列

在這里插入圖片描述

int[][] array = {{1,2},{3,4},{5,6}};
//打印二維數(shù)組所有元素
for (int i = 0; i < array.length; i++) { //arrays.length=3
    for (int j = 0; j < array[i].length; j++) {
        System.out.print(array[i][j]+" ");
    }
    System.out.println();
}

4、Arrays類

  • 數(shù)組的工具類java.util.Arrays
  • 由于數(shù)組對(duì)象本身并沒有什么方法可以供我們使用,但API提供了一個(gè)工具類Arrays供我們使用。
  • Array類中的方法都是static修飾的靜態(tài)方法,使用時(shí)直接使用類名進(jìn)行調(diào)用,可以不用對(duì)象調(diào)用。
  • 常用功能
    •  給數(shù)組賦值:fill方法。
    • 排序:sort方法,升序。
    • 比較數(shù)組:equals方法比較數(shù)組中元素值是否相等。
    • 查找數(shù)組元素:binarySearch對(duì)排序好的數(shù)組進(jìn)行二分查找法操作。
int[] a = {1,2,3,4,9000,32145,451,21};
System.out.println(a); // [I@28d93b30 (hashcode)

//Arrays.toString 打印數(shù)組元素
System.out.println(Arrays.toString(a)); //[1, 2, 3, 4, 9000, 32145, 451, 21]

//二分法查找某值 返回下標(biāo)
System.out.println(Arrays.binarySearch(a, 9000)); // 4

//填充
Arrays.fill(a,2,4,0); //數(shù)組[a[2]~a[4])之間填充0
System.out.println(Arrays.toString(a)); //[1, 2, 0, 0, 9000, 32145, 451, 21]

//升序排序
Arrays.sort(a);

5、冒泡排序

1、冒泡排序是八大排序最出名的排序算法。
2、代碼:兩層循環(huán),外層冒泡輪數(shù),里層依次比較。
3、當(dāng)我們看到嵌套循環(huán),應(yīng)該立馬就可以得出這個(gè)算法的時(shí)間復(fù)雜度為O(n2)。

//冒泡排序
//1.比較數(shù)組中兩個(gè)相鄰的元素,如果第一個(gè)數(shù)大于第二個(gè)數(shù),交換它們位置
//2.每一次比較,都會(huì)產(chǎn)生一個(gè)最大或最小的數(shù)字(升序?yàn)樽畲髷?shù))
//3.下一輪則可以少一次排序
//4.依次循環(huán),直到結(jié)束
public static int[] sort(int[] array){
    int temp=0;
    //外層循環(huán),次數(shù)length-1
    for (int i = 0; i < array.length-1; i++) {
        //內(nèi)層循環(huán):如果第一個(gè)數(shù)大于第二個(gè)數(shù),交換它們位置
        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;
            }
        }
    }
    return array;
}

public static void main(String[] args) {
    int[] a={8,1,35,47,19,-2};
    int[] sort = sort(a);
    System.out.println(Arrays.toString(sort)); //[-2, 1, 8, 19, 35, 47]
}

優(yōu)化

	//冒泡排序算法
	int[] a = {6,2,4,5,2,1,3};
	int temp = 0;
	for(int i = 0;i<a.length-1;i++){    
		boolean flag = false;
	    for(int j = 0;j<a.length-1-i;j++){
	        if(a[j] > a[j+1]){
	            temp = a[j];
	            a[j] = a[j+1];
	            a[j+1] = temp;
	            flag = true;
	        }
	    }
	}
	if(!flag){
		break;
	}
	System.out.println("排序后的結(jié)果是:");
	for(int i : arr){
	    System.out.print(i);
	}

6、稀疏數(shù)組

當(dāng)一個(gè)數(shù)組中大部分元素為0,或者為同一值的數(shù)組時(shí),可以使用稀疏數(shù)

  • 組來(lái)保存該數(shù)組稀疏數(shù)組的處理方式是:
    • 記錄數(shù)組一共有幾行幾列,有多少個(gè)不同值
    • 把具有不同值的元素和行列及值記錄在一個(gè)小規(guī)模的數(shù)組中,從而縮小程序的規(guī)模
    • 如下圖:左邊是原始數(shù)組,右邊是稀疏數(shù)組

在這里插入圖片描述

需求:編寫五子棋游戲中,有存盤退出和續(xù)上盤的功能
分析問題:因?yàn)樵摱S數(shù)組的很多值是默認(rèn)值0,因此記錄了很多沒有意義的數(shù)據(jù)。
解決:稀疏數(shù)組

//創(chuàng)建一個(gè)二維數(shù)組 11*11  0:沒有棋子,1:黑棋  2:白棋
int[][] array1 = new int[11][11];
array1[1][2] = 1;
array1[2][3] = 2;
//輸出原始的數(shù)組
System.out.println("原始的數(shù)組:");
for (int[] array : array1) {
    for (int i : array) {
        System.out.print(i+"\t");
    }
    System.out.println();
}

//轉(zhuǎn)換為稀疏數(shù)組保存
//1.有效值的個(gè)數(shù)
int sum = 0; //有效值總數(shù)
for (int i = 0; i < 11; i++) {
    for (int j = 0; j < 11; j++) {
        if(array1[i][j]!=0){
            sum++;
        }
    }
}
//2.創(chuàng)建一個(gè)稀疏數(shù)組
int[][] array2 = new int[sum+1][3];
array2[0][0] = 11;
array2[0][1] = 11;
array2[0][2] = sum;

//3.遍歷二維數(shù)組,將有效值存放到稀疏數(shù)組
int count = 0;
for (int i = 0; i < array1.length; i++) {
    for (int j = 0; j < array1[i].length; j++) {
        if(array1[i][j]!=0){
            count++;
            array2[count][0] = i;
            array2[count][1] = j;
            array2[count][2] = array1[i][j];
        }
    }
}

//4.輸出稀疏數(shù)組
System.out.println("稀疏數(shù)組:");
for (int i = 0; i < array2.length; i++) {
    for (int j = 0; j < array2[i].length; j++) {
        System.out.print(array2[i][j]+"\t");
    }
    System.out.println();
}

/* 結(jié)果:
輸出原始的數(shù)組
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
稀疏數(shù)組
11 11 2
1 2 1
2 3 2
*/

視頻學(xué)習(xí)地址:https://www.bilibili.com/video/BV12J41137hu?p=51

總結(jié)

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

相關(guān)文章

  • 完整java開發(fā)中JDBC連接數(shù)據(jù)庫(kù)代碼和步驟

    完整java開發(fā)中JDBC連接數(shù)據(jù)庫(kù)代碼和步驟

    這篇文章主要介紹了完整java開發(fā)中JDBC連接數(shù)據(jù)庫(kù)代碼和步驟,需要的朋友可以參考下
    2015-09-09
  • springboot整合curator實(shí)現(xiàn)分布式鎖過(guò)程

    springboot整合curator實(shí)現(xiàn)分布式鎖過(guò)程

    這篇文章主要介紹了springboot整合curator實(shí)現(xiàn)分布式鎖過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Spring Cache監(jiān)控配置與使用規(guī)范的建議

    Spring Cache監(jiān)控配置與使用規(guī)范的建議

    這篇文章主要介紹了Spring Cache監(jiān)控配置與使用規(guī)范的建議,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Spring配置多數(shù)據(jù)源切換

    Spring配置多數(shù)據(jù)源切換

    今天小編就為大家分享一篇關(guān)于Spring配置多數(shù)據(jù)源切換,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • SpringBoot中的五種對(duì)靜態(tài)資源的映射規(guī)則的實(shí)現(xiàn)

    SpringBoot中的五種對(duì)靜態(tài)資源的映射規(guī)則的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot中的五種對(duì)靜態(tài)資源的映射規(guī)則的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Spring框架構(gòu)造注入操作實(shí)戰(zhàn)案例

    Spring框架構(gòu)造注入操作實(shí)戰(zhàn)案例

    這篇文章主要介紹了Spring框架構(gòu)造注入操作,結(jié)合具體實(shí)例形式分析了spring框架構(gòu)造輸入的相關(guān)定義與使用操作技巧,需要的朋友可以參考下
    2019-11-11
  • SpringCloud解決Feign異步回調(diào)問題(SpringBoot+Async+Future實(shí)現(xiàn))

    SpringCloud解決Feign異步回調(diào)問題(SpringBoot+Async+Future實(shí)現(xiàn))

    這篇文章主要介紹了SpringCloud解決Feign異步回調(diào)問題(SpringBoot+Async+Future實(shí)現(xiàn)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 基于Java Gradle復(fù)制項(xiàng)目模塊過(guò)程圖解

    基于Java Gradle復(fù)制項(xiàng)目模塊過(guò)程圖解

    這篇文章主要介紹了基于Java Gradle復(fù)制項(xiàng)目模塊過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • JAVA多線程之JDK中的各種鎖詳解(看這一篇就夠了)

    JAVA多線程之JDK中的各種鎖詳解(看這一篇就夠了)

    多線程編程可以說(shuō)是在大部分平臺(tái)和應(yīng)用上都需要實(shí)現(xiàn)的一個(gè)基本需求,下面這篇文章主要給大家介紹了關(guān)于JAVA多線程之JDK中各種鎖的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • Spring中RedisTemplate的基本使用淺析

    Spring中RedisTemplate的基本使用淺析

    Spring Boot Data(數(shù)據(jù)) Redis中提供了RedisTemplate和StringRedisTemplate,其中StringRedisTemplate是RedisTemplate的子類,兩個(gè)方法基本一致。本文介紹了Spring操作Redis的方法,需要的可以參考一下
    2023-02-02

最新評(píng)論