1. 程式人生 > 實用技巧 >Java 陣列的學習筆記

Java 陣列的學習筆記

陣列的學習

陣列概述

陣列就是相同型別資料的有序的組合,

陣列表述的是相同型別的若干個資料,按照一定的先後次序排列組個而成

其中,每一個數據作一個數組元素,每個陣列元素可以通過一個下標來訪問他們

陣列宣告建立

首先必須要宣告陣列變數,才能再程式中使用陣列。下面是宣告陣列變數的語法:

public class ArrayDemo01 {
//變數的型別 變數的名字=變數的值
//陣列型別
public static void main(String[] args) {
int[]nums;//定義
int nums2[];
}
}

Java語言使用new操作符來建立陣列,語法如下:

nums=new int[10];

陣列的元素是通過索引訪問的,陣列索引從0 開始。

獲取陣列長度:

package com.ronghui.array;

public class ArrayDemo01 {
//變數的型別 變數的名字=變數的值
//陣列型別
public static void main(String[] args) {
int[] nums;//宣告一個數組

nums=new int[10];//建立一個數組
//給陣列元素賦值
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;
//計算所有元素的和
//獲取陣列的長度 arrays.length
int sum=0;
for(int i=0;i<nums.length;i++){
sum=sum+ nums[i];
}
System.out.println("總和為:"+sum);
}
}

記憶體分析

package com.ronghui.array;

public class ArrayDemo02 {
public static void main(String[] args) {
//靜態初始化:建立+賦值
int []a={1,2,3,4,5,6,7,8};
System.out.println(a[0]);

//動態初始化:包含預設初始化
int[]b=new int[10];
b[0]=10;
System.out.println(b[0]);
}
}

陣列的四個基本特點

  1. 其長度是確定的,陣列一旦被建立,它的大小就是不可以改變的。

  2. 其元素必須是相同型別,不允許出現混合型別。

  3. 陣列中的元素可以是任何資料型別,包括基本型別和引用型別

  4. 陣列變數屬引用型別,陣列也可以看成數物件,陣列中的每個元素相當於該物件的成員變數。陣列本身就是物件,Java中物件是在堆中的,因此陣列無論儲存原始型別還是其他物件型別,陣列物件本身是在堆中的。

陣列使用

陣列使用有三種

  1. 普通的for迴圈

package com.ronghui.array;

public class ArrayDemo03 {
public static void main(String[] args) {
int[]array={1,2,3,4,5};
//列印全部陣列元素
for (int i=0;i< array.length;i++){
System.out.println(array[i]);
}
System.out.println("==================");
//計算所有元素的和
int sum=0;
for (int i=0;i< array.length;i++){
sum=sum+array[i];
}
System.out.println("sum="+sum);
System.out.println("==================");
//查詢最大元素
int max=array[0];
for (int i=1;i< array.length;i++){
if (max<array[i]){
max=array[i];
}
}
System.out.println(max);
}
}
  1. for each迴圈

    package com.ronghui.array;

    public class ArrayDemo04 {
    public static void main(String[] args) {
    int[]arrays ={1,2,3,4,5};

    // for (int array : arrays) {//增強型的for迴圈,沒有下標
    // System.out.println(array);
    // }
    // printArray(arrays);
    int[] reverse = reverse(arrays);
    printArray(reverse);
    }
    //列印陣列元素
    public static void printArray(int[] arrays){
    for (int i=0;i< arrays.length;i++){
    System.out.print(arrays[i]+" ");
    }
    }
    //反轉陣列
    public static int[] reverse(int[] arrays){
    int[] result =new int[arrays.length];
    //反轉
    for (int i=0,j=result.length-1;i<arrays.length;i++,j--){
    result[j]=arrays[i];
    }
    return result;
    }
    }

  2. 陣列做方法入參

  3. 陣列做返回值

多維陣列

package com.ronghui.array;

public class ArrayDemo05 {
public static void main(String[] args) {
//[5][2]
/**
* 1,2 array[0]
* 2,3 array[1]
* 3,4 array[2]
* 4,5 array[3]
* 5,6 array[4]
*/
int[][] array={{1,2},{2,3},{3,4},{4,5},{5,6},};
printArray(array[1]);
System.out.println("===============");
System.out.println(array[0][0]);
System.out.println(array[0][1]);
}

public static void printArray(int[] arrays){
for (int i=0;i< arrays.length;i++){
System.out.print(arrays[i]+" ");
}
}
}

Arrays 類

package com.ronghui.array;

import java.util.Arrays;

public class ArrayDemo06 {
public static void main(String[] args) {
int[] a={1,2,3,4,54,875,54,556,5568,5557,44787};
System.out.println(a);
//d列印陣列元素 Arrays.toString
//System.out.println(Arrays.toString(a));
//printArray(a);
Arrays.sort(a);//陣列排序
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] + ", ");
}
}
}
}

氣泡排序

  • 氣泡排序無疑是最為出名的排序演算法之一,總共有八大排序

  • 氣泡排序分為兩層迴圈,外層冒泡輪數,裡層依次比較

    package com.ronghui.array;
    
    import java.util.Arrays;
    
    public class ArrayDemo07 {
        public static void main(String[] args) {
            int[] a={1,5,6,2,45,56,32,45,78,98,412,4545,222,52,5,6};
            int[] sort = sort(a);//呼叫完我們自己寫的排序方法後,返回一個排序後的陣列
            System.out.println(Arrays.toString(sort));
        }
        //氣泡排序
        //1.比較陣列中兩個相鄰的元素,如果第一個比第二個數大,我們就交換他們的位置
        //2.每次比較都會產生一個最大或者最小的數字
        //3.下一輪則可以少一次排序
        //4.依次迴圈直到結束
        public static int[] sort(int[] array){
            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+1]<array[j]){
                        temp=array[j];
                        array[j]=array[j+1];
                        array[j+1]=temp;
                    }
                }
            }
            return array;
        }
    }

稀疏陣列

package com.ronghui.array;

public class ArrayDemo08 {
    public static void main(String[] args) {
        //建立一個二維陣列 11*11 0:沒有棋子 1:黑棋 2 白棋
        int [][] array1=new int[11][11];
                array1[1][2]=1;
                array1[2][3]=2;
        //輸出原始的陣列
        System.out.println("輸出原始的陣列");
        for (int[] ints:array1){
            for(int anInt:ints){
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        //轉換為稀疏陣列
        //獲取有效值的個數
        int sum =0;
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; 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;
           //遍歷二維陣列,將非0的值,存到稀疏陣列中
        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];
                }
            }

        }
        //輸出稀疏陣列
        System.out.println("輸出稀疏陣列:");
        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("================");
        System.out.println("還原");
        //讀取稀疏陣列
        int[][]array3 =new  int[array2[0][0]][array2[0][1]];
        //給其中的元素還原值
        for (int i = 1; i < array2.length; i++) {
            array3[array2[i][0]][array2[i][1]]=array2[i][2];
        }
        //列印
        System.out.println("輸出還原的陣列");
        for (int[] ints:array3){
            for(int anInt:ints){
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }

    }
}