複習1:Arrays

Arrays

  • 數組是什麼

  • 數組的特點

  • 數組的聲明

  • 數組的長度

  • 元素的獲取

  • 元素的打印

  • 數組的擴容

  • 數組的排序

  • 二維數組是什麼

  • 二維數組的定義

  • 二維數組的內存圖


數組是什麼

數組是有序數據的集合,用於存放一組數據


數組的特點

  • 數組內元素的類型統一(與數組類型相同)
  • 數組內元素的排序是有序的(按賦值時的順序排列)
  • 數組本身是不可變的,數組元素可變 (底層被final修飾)

數組的聲明(以int類型爲例)

聲明方式 特點1 特點2
int[] array = {1,2,3,4} 聲明與初始化同時進行,不可二次賦值
int[] array = new int[]{1,2,3,4} 聲明與初始化同時進行,可以多次賦值
int[] array = new int[int n] 聲明與初始化完全分離,可以多次賦值 數組內有默認元素,元素值視數據類型而定

注意:無論何種方式,數組的長度在被定義之時就已經確定下來了,且無法改變


數組的長度

數組的長度指的就是數組內元素的個數,數組本身沒有長度

  • 獲取數組長度:array.length

元素的獲取

數組元素都有屬於自己的索引,從0開始,到**(array.length-1)**結束

  • 示例:array [0],array [1],array [2],…,array [array .length-1]

注意:不能獲取超出長度的元素,否則將拋出數組下標越界異常


元素的打印

  • 方式一:遍歷/迭代—>輸出
  • 方式二:Arrays.toString(Array)

注意:直接打印數組得到的是數組地址


數組的擴容

數組本身長度是不可變的,無法在原來的數組上新增

擴容方法特點 特點
創建一個新的數組,遍歷源數組元素賦值給新數組,再將新數組賦值給源數組 基礎、繁瑣
System.arraycopy(源數組,源數組傳遞元素的開始位置,新數組,新數組接收元素的開始位置,從源數組複製到新數組的元素長度) 只實現了數組的複製,沒有對源數組進行擴容
Arrays.copyof(源數組,長度) 自我複製實現對源數組的擴容

注意:

  • System.arraycopy:
    • 源數組傳遞元素時要注意越界問題(傳遞元素的開始位置+傳遞元素的長度<=源數組長度)
    • 新數組要留有足夠的長度接收傳遞過來的元素(新數組長度-接收元素的開始位置>=傳遞元素的長度)
  • Arrays.copyof:
    • 返回一個數組,數組類型與源數組相同
    • 複製時,傳遞元素與接收元素都默認從第一個位置開始
    • 除了擴容,還可以實現數組長度的縮減

數組的排序

package myTest;

import java.util.Arrays;

public class Sort {
	public static void main(String[] args) {
	
		//JDK自帶排序方法,默認從小到大
		int[] arr = new int[] {6,4,1,3,77,11,34};
		Arrays.sort(arr);
		System.out.println(Arrays.toString(arr));
		
		//選擇排序,從小到大
		int[] brr = new int[] {6,4,1,3,77,11,34};
		for(int i=0;i<brr.length-1;i++) {
			for(int j=i+1;j<brr.length;j++) {
				if(brr[i]>brr[j]) {
					int temp = brr[j];
					brr[j] = brr[i];
					brr[i] = temp;
				}
			}
		}
		System.out.println(Arrays.toString(brr));
		
		//冒泡排序,從小到大
		int[] crr = new int[] {6,4,1,3,77,11,34};
		for(int i=0;i<crr.length-1;i++) {
			for(int j=0;j<crr.length-1;j++) {
				if(crr[j]>crr[j+1]) {
					int temp = crr[j+1];
					crr[j+1] = crr[j];
					crr[j] 	 = temp;
				}
			}
		}
		System.out.println(Arrays.toString(crr));
		
		//插入排序,從小到大
		int[] drr = new int[] {6,4,1,3,77,11,34};
		for(int i=1;i<drr.length;i++) {
			for(int j=i;j>0;j--) {
				if(drr[j-1]>drr[j]) {
					int temp = drr[j];
					drr[j] = drr[j-1];
					drr[j-1] = temp;
				}else {
					break;
				}
			}
		}
		System.out.println(Arrays.toString(drr));
	}
}


二維數組是什麼

數組的數組,將一個數組看做是一種數據類型,創建該數據類型的數組

  • 示例:int[ ] [ ],其中int[ ]可以看做是一個數據類型,int[ ] [ ]就是這個類型的一個數組

注意:Java中沒有二維數組的概念,正確的叫法是數組類型的數組


二維數組的定義

package day20191026;

public class Demo02 {
	public static void main(String[] args) {
		
		//創建了一個整形數組類型的數組,其中的元素都是默認值
		int[][] a = new int[3][];
		
		//二維數組的每一個元素都是數組,使用前需要先聲明數組
        
        //當二維數組中的元素長度不同時
		a[0] = new int[4];
		a[1] = new int[5];
		a[2] = new int[6];
        
        //當二維數組中的元素長度相同時
        int[][] a = new int[3][4];
		
	}
}

注意:聲名二維數組時,需要將二維數組的長度填在 “new int[ ] [ ]” 中的前一個 “[ ]” 中,將元素的長度填在後一個 “[ ]” 中


二維數組的內存圖

以new int[3] [4]爲例
二維數組內存圖


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章