1. 程式人生 > 其它 >八、Java陣列

八、Java陣列

Java陣列

陣列概述

相同型別資料的有序集合

按先後次序排列組合

每一個數據都可稱作陣列元素,每個陣列元素可以通過一個下標訪問它們

陣列定義

宣告陣列:變數型別[] 陣列名 = new 變數型別[大小];

陣列長度:array.lenth()

陣列第一個下標為0

記憶體分析

Java記憶體:堆、棧和方法區

堆:

  • 存放new的物件和陣列
  • 可以被所有執行緒共享,不會存放別的物件引用

棧:

  • 存放基本的變數型別(包含這個基本型別的具體數值)
  • 引用物件的變數(會存放這個引用在堆裡面的具體地址)

方法區:

  • 可以被所有執行緒共享
  • 包含了所有的class和static變數
  1. 宣告陣列

    int[] array =null; 在棧中

  2. 建立陣列 在堆中開闢一個空間

    array = new int[10];

  3. 給陣列元素賦值 在堆中空間記憶體放

    array[0]=1;

初始化

靜態初始化

定義之後不可改變

建立+賦值

int[] a ={0,1,2};

動態初始化 (包含預設初始化)

int[] b =new int[10];

b[0]=1;

陣列特點

  1. 長度是確定的,一旦被建立,其大小不可以改變
  2. 元素必須為相同型別
  3. 陣列中元素可以是任何資料型別,包括基本型別和引用型別
  4. 陣列的變數屬於引用型別,陣列本身就是物件,物件在堆中(new 出來的都是堆中的)陣列元素相當於物件的成員變數
  5. java.lang.ArrayIndexOutOfBoundsException
    陣列下標越界異常

多維陣列

多維陣列可以看成陣列的陣列

二維陣列定義: int a[] []=new int[2] [5];

package com.dy.array;

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

Arrays類

Arrays裡的方法都是static修飾的靜態方法,可以直接通過類名進行呼叫

package com.dy.array;

import java.util.Arrays;

public class Demo03 {
    public static void main(String[] args) {
        int[] a ={1,3,6,3,80,3874,9940,293};
        System.out.println(a);//地址
        //列印陣列元素
        System.out.println(Arrays.toString(a));
        //排序
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));
        //填充
        Arrays.fill(a,500);
        System.out.println(Arrays.toString(a));
    }

}

氣泡排序

八大排序

package com.dy.array;

import java.util.Arrays;

public class Demo04 {
    public static void main(String[] args) {
        int[] a = {1,26,13,7,2};
        int[] b=sort(a);
        System.out.println(Arrays.toString(b));
    }
    //氣泡排序
    //比較相鄰兩個元素,如果第一個比第二個大,交換他們的位置
    //每次比較,會產出一個最大,或者一個最小
    //下一輪可以少一次拍訊 直至結束
    private static int[] sort(int[] arrays){
        int max;
        for (int i = 0; i < arrays.length-1; i++) {
            for (int j = 0; j < arrays.length-1-i; j++) {
                if (arrays[j+1]>arrays[j]){
                    max=arrays[j];
                    arrays[j]=arrays[j+1];
                    arrays[j+1]=max;
                }
            }
        }
        return arrays;
    }
}

稀疏陣列

package com.dy.array;

import java.util.Arrays;

public class Demo05 {
    public static void main(String[] args) {
        int[][] a =new int[11][11];
        a[1][2]=1;
        a[2][3]=2;
        for (int[] ints : a) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        System.out.println("=========================");
        //轉化為稀疏陣列儲存
        //1.獲取有效值的個數
        int sum = 0;
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (a[i][j]!=0){
                    sum++;
                }
            }
        }
        //2.建立一個稀疏陣列
        int[][] array2=new int[sum+1][3];
        array2[0][0]=a.length;
        array2[0][1]=a[0].length;
        array2[0][2]=sum;
        int count=0;
        //遍歷二維陣列,將非零的值,存放稀疏陣列中
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (a[i][j]!=0){
                    count++;
                    array2[count][0]=i;
                    array2[count][1]=j;
                    array2[count][2]=a[i][j];
                }
            }
        }
        for (int[] ints : array2) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }

        System.out.println("==========================");
        //還原
        int[][] arrays=new int[array2[0][0]][array2[0][1]];
        for (int i = 1; i < array2.length; i++) {
                arrays[array2[i][0]][array2[i][1]]=array2[i][2];
        }
        for (int[] ints : arrays) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
    }
}