日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

六 Java数组

發布時間:2025/1/21 java 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 六 Java数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數組的定義

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

數組聲明創建

  • 首先必須聲明數組變量,才能在程序中使用數組。下面是聲明數組變量的語法:

    dataType[] arrayRefVar; //首選的方法 dataType arrayRefVar[]; //效果相同
  • Java語言使用new操作符來創建數組,語法如下:

    dataType[] arrayRefVar = new dataType[arraySize];
  • 數組的元素是通過索引訪問的,數組索引從0開始。

  • 獲取數組長度:arrays.length

代碼示例

public class Demo01_initialization {// 變量類型 變量名 = 變量的值;// 數組類型public static void main(String[] args) {int[] nums;//1. 聲明一個數組nums = new int[10];//2. 創建一個數組/*聲明和創建可以寫在一起int[] nums = new int[10];*///3. 給數組元素賦值nums[0] = 1;nums[1] = 2;nums[2] = 3;nums[3] = 4;nums[4] = 5;nums[5] = 6;nums[6] = 7;nums[7] = 8;nums[8] = 9;//nums[9] = 10;System.out.println(nums[9]);//int的默認值為0//計算數組中所有元素的和int sum = 0;for (int i = 0; i < nums.length; i++) {sum = sum + nums[i];}System.out.println(sum);} }

三種初始化及內存分析

Java的內存分析

數組初始化過程

  • 聲明數組

    int[] array = null;

  • 創建數組

    array = new int[10];

    默認初始化,此時訪問數組再堆中分配的空間,其中值為0

  • 給數組元素賦初值

    nums[0] = 1; nums[1] = 2; nums[2] = 3; nums[3] = 4; nums[4] = 5; nums[5] = 6; nums[6] = 7; nums[7] = 8; nums[8] = 9; nums[9] = 10;

  • 三種初始化

    • 靜態初始化
      當我們事先知道,需要存儲哪一些數據的時候,選用靜態初始化

      //靜態初始化:創建 + 賦值 int[] a={1,2,3,4,5}; System.out.println(a[0]);//輸出1
    • 動態初始化
      當我們事先不知道,需要存儲哪些數據的時候,只能使用動態初始化

      //動態初始化 : 包含默認初始化 int[] b = new int[10]; b[0] = 10; System.out.println(b[0]);//輸出10 System.out.println(b[1]);//輸出0
    • 數組默認的初始化

      • 數組是引用類型,它的元素相當于類的實例變量,因此數組一經分配空間,其中的每個元素也被按照實例變量同樣的方式被隱式初始化。

    數組的四個基本特點

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

    數組的使用

    For-Each循環

    int[] nums = {1,2,3,4,5}; //jdk1.5以上 沒有下標 for (int num : nums) {System.out.println(num); }

    數組作方法入參

    //打印數組 public static void printArray(int[] nums){for (int i = 0; i < nums.length; i++) {System.out.println(nums[i]+" ");} }

    數組作返回值

    //反轉數組 public static int[] reverse(int[] nums){int[] result = new int[nums.length];//反轉操作for (int i = 0; i < nums.length; i++) {result[nums.length - 1 - i] = nums[i];}return result; }

    多維數組

    • 多維數組可以看成是數組的數組,比如二維數組就是一個特殊的一維數組,其每一個元素都是一個一維數組。

    • 二維數組

      int a[][] = new int[2][5]; //以上的二維數組a可以看成一個兩行五列的數組。
    • 二維數組圖形化描述

    代碼示例

    public static void main(String[] args) {//[4][2]/*1,2 array[0]2,3 array[1]3,4 array[2]4,5 array[3]*/int[][] array1 ={{1,2},{2,3},{3,4},{4}};System.out.println(array1[3][0]);//輸出4//System.out.println(array1[3][1]);//報錯int[][] array ={{1,2},{2,3},{3,4},{4,5}};//遍歷二維數組元素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();} }

    Arrays類

    • 數組的工具類 java.util.Arrays
    • 由于數組對象本身并沒有什么方法可以供我們調用,但API中提供了一個工具類Arrays供我們使用,從而可以對數據對象進行一些基本的操作。
    • 查看JDK幫助文檔
    • Arrays類中的方法都是static修飾的靜態方法,在使用的時候可以直接使用類名進行調用,而"不用"使用對象來調用(注意:是"不用”而不是"不能")
    • 具有以下常用功能:
      • 給數組賦值:通過fill方法。
      • 對數組排序:通過sort方法,按升序。
      • 比較數組:通過equals方法比較數組中元素值是否相等。
      • 查找數組元素:通過binarySearch方法能對排序好的數組進行二分查找法操作。

    代碼示例

    public static void main(String[] args) {int[] nums = {2,3,5,4,1};System.out.println(nums);//[I@1b6d3586//打印數組元素System.out.println(Arrays.toString(nums));//[2, 3, 5, 4, 1]//數組排序Arrays.sort(nums);System.out.println(Arrays.toString(nums));//[1, 2, 3, 4, 5]//數組填充Arrays.fill(nums,2,4,0);//左閉右開System.out.println(Arrays.toString(nums));//[1, 2, 0, 0, 5] }

    冒泡排序

    //冒泡排序(時間復雜度為O(n2)) //1.比較數組中兩個相鄰的元素,如果第一個數比第二個數大,我們就交換他們的位置 //2.每一輪比較,都至少會產生出一個最大,或者最小的數字; //3.下一輪則可以少一次比較! //4.依次循環,直到結束! public static int[] sort(int[] nums){//輪數,五個數依次確定四個最小值即可,所以四輪即可boolean flag = true; //當某一輪比較沒有發生改變,即已經有序,則可以直接返回for (int i = 0; i < nums.length - 1; i++) {//從前往后依次順序相鄰比較,第i輪已經確定i個最大值flag = false;for (int j = 0; j < nums.length - 1 - i; j++) { if (nums[j] > nums[j+1]) {int temp = nums[j+1];nums[j + 1] = nums[j];nums[j] = temp;}}if(flag){return nums;}}return nums; }

    稀疏數組

    • 當一個數組中大部分元素為0,或者為同一值的數組時,可以使用稀疏數組來保存該數組

    • 稀疏數組的處理方式是:

      • 記錄數組一共有幾行幾列,有多少個不同值
      • 把具有不同值的元素和行列及值記錄在一個小規模的數組中從而縮小程序的規模
    • 如下圖:左邊是原始數組,右邊是稀疏數組(第一行存儲了共6行,7列,8個不同值)

    代碼示例

    public static void main(String[] args) {//創建一個11*11的數組 0:沒有棋子 1:黑子 2:白子int[][] array1 = new int[11][11];array1[1][2] = 1;array1[2][3] = 1;//輸出原始的數組System.out.println("=====原始數組=====");for (int[] ints : array1) {for (int anInt : ints) {System.out.print(anInt+" ");}System.out.println();}//轉換為稀疏數組存儲System.out.println("=====稀疏數組=====");//1. 獲取有效值的個數int sum = 0;for (int i = 0; i < array1.length; i++) {for (int j = 0; j < array1[i].length; j++) {if(array1[i][j]!=0)sum++;}}System.out.println("有效值個數為" + sum);//2.創建一個稀疏矩陣int[][] array2 = new int[sum+1][3];array2[0][0] = 11;array2[0][1] = 11;array2[0][2] = sum;//3. 遍歷二維數組,將非零的值存放在稀疏數組中。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];}}}//輸出稀疏矩陣for (int i = 0; i < array2.length; i++) {System.out.println(array2[i][0]+" "+array2[i][1]+" "+array2[i][2]);}//轉化為原始數組System.out.println("=====還原數組=====");//1.讀取稀疏數組int[][] array3 = new int[array2[0][0]][array2[0][1]];//2.給其中的元素還原它的值for (int i = 1; i < array2.length; i++) {array3[array2[i][0]][array2[i][1]] = array2[i][2];}//輸出還原的數組for (int[] ints : array3) {for (int anInt : ints) {System.out.print(anInt+" ");}System.out.println();} }

    運行結果

    總結

    以上是生活随笔為你收集整理的六 Java数组的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。