JavaSE 陣列:一維陣列&二維陣列
day05目錄:
陣列
一維陣列
二維陣列
05.01_Java語言基礎(陣列概述和定義格式說明)(掌握)
A:為什麼要有陣列
現在需要統計某公司員工的工資情況,例如計算平均工資、找到最高工資等。假設該公司有80名員工,
用前面所學的知識,程式首先需要宣告80個變數來分別記住每位員工的工資,然後在進行操作,這樣做會顯得很麻煩。
為了解決這種問題,Java就提供了陣列供我們使用
結論:
陣列是儲存多個變數(元素)的東西(容器)
這多個變數的資料型別要一致
B:陣列概念
陣列是儲存同一種資料型別多個元素的集合。也可以看成是一個容器。
陣列既可以儲存基本資料型別,也可以儲存引用資料型別(後面講解)。
C:陣列定義格式
格式1: 資料型別[] 陣列名;
格式2: 資料型別 陣列名[];
舉例:
int[] a; 定義了一個int型別的陣列a;
int a[]; 定義了一個int型別的a陣列;
推薦使用第一種定義方式。
05.02_Java語言基礎(陣列的初始化動態初始化)(掌握)
A:什麼是陣列的初始化
Java中的陣列必須先初始化,然後才能使用。
所謂初始化:就是為陣列中的陣列元素分配記憶體空間,併為每個陣列元素賦值。
B:初始化的分類:
a:動態初始化: 只指定長度,由系統給出初始化值
b:靜態初始化: 給出初始化值,由系統決定長度
注意事項: 這兩種方式,只能使用一種,不能進行動靜結合
C:動態初始化的格式:
資料型別[] 陣列名 = new 資料型別[陣列長度];
陣列長度其實就是陣列中元素的個數。
舉例: int[] arr = new int[3]; 定義了一個int型別的陣列arr,這個陣列可以存放3個int型別的值。
D:案例演示
輸出陣列名稱和陣列元素
05.03_Java語言基礎(Java中的記憶體分配以及棧和堆的區別)(理解)
Java虛擬機器在執行Java程式的過程中會把它管理的記憶體劃分成若干個不同的資料區域
A:棧: 存放的是區域性變數
區域性變數:在方法定義中或者方法宣告上的變數都是區域性變數。
B:堆: 存放的是所有new出來的東西
特點:
a: 每一個new出來的東西都會為其分配一個地制值。
b: 每一個變數都有一個預設的值
byte,short,int,long -- 0
float,double -- 0.0
char -- '\u0000'
boolean -- false
引用資料型別 -- null
c: 使用完畢就變成了垃圾,等待垃圾回收器對其回收
C:方法區:(物件導向部分講解)
D:本地方法區:(和系統相關)
E:暫存器:(cpu使用)
05.04_Java語言基礎(陣列的記憶體圖解1一個陣列)(掌握)
A:定義一個陣列,輸出陣列名稱和陣列中的元素值,給陣列賦值,再次輸出陣列名稱和陣列中的元素值
05.05_Java語言基礎(陣列的記憶體圖解2二個陣列)(掌握)
A:定義兩個陣列,分別輸出陣列名稱和陣列中的元素值,分別給兩個陣列賦值,再次輸出陣列名稱和陣列中的元素值
05.06_Java語言基礎(陣列的記憶體圖解3三個引用2個陣列)(掌握)
A: 定義第一個陣列,定義完畢後,給陣列元素賦值。賦值完畢後,再輸出陣列名稱和元素。
定義第二個陣列,定義完畢後,給陣列元素賦值。賦值完畢後,再輸出陣列名稱和元素。
定義第三個陣列,把第一個陣列的地址值賦值給它。(注意型別一致),通過第三個陣列的名稱去把元素重新賦值。
最後,再次輸出第一個陣列陣列名稱和元素。
05.07_Java語言基礎(陣列的初始化靜態初始化及記憶體圖)(掌握)
A:靜態初始化的格式:
格式:資料型別[] 陣列名 = new 資料型別[]{元素1,元素2,…};
舉例: int[] arr = new int[]{1,2,3};
簡化格式:
資料型別[] 陣列名 = {元素1,元素2,…};
舉例: int[] arr = {1,2,3};
B:畫圖演示
a:定義一個陣列,輸出陣列名稱和陣列中的元素值
05.08_Java語言基礎(陣列操作的兩個常見小問題越界和空指標)(掌握)
A:案例演示
a:ArrayIndexOutOfBoundsException:陣列索引越界異常
原因:你訪問了不存在的索引。
b:NullPointerException:空指標異常
原因:陣列已經不在指向堆記憶體了。而你還用陣列名去訪問元素。
05.09_Java語言基礎(陣列的操作1遍歷)(掌握)
A:案例演示: 陣列遍歷:就是依次輸出陣列中的每一個元素。
05.10_Java語言基礎(陣列的操作2獲取最值)(掌握)
A:案例演示: 陣列獲取最值(獲取陣列中的最大值或者最小值)
05.11_Java語言基礎(陣列的操作3反轉)(掌握)
A:案例演示: 陣列元素反轉(就是把元素對調)
05.12_Java語言基礎(陣列的操作4查表法)(掌握)
A:案例演示: 陣列查表法(根據鍵盤錄入索引,查詢對應星期)
05.13_Java語言基礎(陣列的操作5基本查詢)(掌握)
A:案例演示: 陣列元素查詢(查詢指定元素第一次在陣列中出現的索引)
05.14_Java語言基礎(二維陣列概述和格式1的講解)(理解)
A:二維陣列概述
我們學校的Java基礎班每個班有很多個學生,所以,可以用陣列來儲存,而我們又同時有很多個Java基礎班。
這個也應該用一個陣列來儲存。如何來表示這樣的資料呢?Java就提供了二維陣列供我們使用
由此可見:其實二維陣列其實就是每一個元素為一維陣列的陣列。
B:二維陣列格式1
資料型別[][] 變數名 = new 資料型別[m][n];
m表示這個二維陣列有多少個一維陣列 必須寫上
n表示每一個一維陣列的元素個數 可選
舉例:
int[][] arr = new int[3][2];
定義了一個二維陣列arr
這個二維陣列有3個一維陣列,名稱是arr[0],arr[1],arr[2]
每個一維陣列有2個元素,可以通過arr[m][n]來獲取
表示獲取第m+1個一維陣列的第n+1個元素
C:注意事項
A:以下格式也可以表示二維陣列
a:資料型別 陣列名[][] = new 資料型別[m][n];
b:資料型別[] 陣列名[] = new 資料型別[m][n];
這兩種格式不推薦使用
B:注意下面定義的區別
int x,y;
int[] x,y[];
區別是:
int[] x,y[];//定義了兩個陣列 一個是一維陣列x 一個是二維陣列y
x=new int[3];
y=new int[3][];
D:案例演示
定義二維陣列,輸出二維陣列名稱,輸出每一個一維陣列名稱,輸出二維陣列的2個元素
05.15_Java語言基礎(二維陣列格式1的記憶體圖解)(理解)
對上邊的操作畫記憶體圖
05.16_Java語言基礎(二維陣列格式2的講解及其記憶體圖解)(理解)
A:二維陣列格式2
資料型別[][] 變數名 = new 資料型別[m][];
m表示這個二維陣列有多少個一維陣列
這一次沒有直接給出一維陣列的元素個數,可以動態的給出。
舉例:
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = new int[1];
B:案例演示
定義一個二維陣列,輸出二維陣列的名稱和二維陣列的的每一個一維陣列,然後動態給二維陣列賦值一維陣列
再次輸出二維陣列中的每一個一維陣列,給二維陣列中的元素賦值,輸出對應的元素值
05.17_Java語言基礎(二維陣列格式3的講解及其記憶體圖解)(理解)
A:二維陣列格式3
資料型別[][] 變數名 = new 資料型別[][]{{元素…},{元素…},{元素…}...};
簡化版:
資料型別[][] 變數名 = {{元素…},{元素…},{元素…}};
這個格式屬於靜態初始化:由我們指定具體的元素值,由系統給分配長度
舉例:
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
int[][] arr = {{1,2,3},{5,6},{7}};
B:案例演示
定義一個二維陣列,列印每一個二維陣列中的一維陣列,在列印每一個二維陣列中的元素
05.18_Java語言基礎(二維陣列練習1遍歷)(理解)
A:案例演示
需求:二維陣列遍歷
外迴圈控制的是二維陣列的長度,其實就是一維陣列的個數。
內迴圈控制的是一維陣列的長度。
05.19_Java語言基礎(二維陣列練習2求和)(理解)
A:案例演示
需求:公司年銷售額求和
某公司按照季度和月份統計的資料如下:單位(萬元)
第一季度:22,66,44
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99
B:需求:列印楊輝三角形(行數可以鍵盤錄入)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
分析:看這種影像的規律
A:任何一行的第一列和最後一列都是1
B:從第三行開始,每一個資料是它上一行的前一列和它上一行的本列之和。
步驟:
A:首先定義一個二維陣列。行數如果是n,我們把列數也先定義為n。
這個n的資料來自於鍵盤錄入。
B:給這個二維陣列任何一行的第一列和最後一列賦值為1
C:按照規律給其他元素賦值
從第三行開始,每一個資料是它上一行的前一列和它上一行的本列之和。
D:遍歷這個二維陣列。
05.20_Java語言基礎(思考題Java中的引數傳遞問題及圖解)(掌握)
A:案例演示
看程式寫結果,並畫記憶體圖解釋
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a: " + a + ",b: " + b);
change(a,b);
System.out.println("a: " + a + ",b: " + b);
int[] arr = {1,2,3,4,5};
change(arr);
System.out.println(arr[1]);
}
public static void change(int a,int b) {
System.out.println("a: " + a + ",b: " + b);
a = b;
b = a + b;
System.out.println("a: " + a + ",b: " + b);
}
public static void change(int[] arr){
for(int x = 0 ; x < arr.length ; x++){
if(arr[x]%2 == 0){
arr[x] *= 2;
}
}
}
遞迴
A:遞迴概述: 方法定義中呼叫方法本身的現象
B:遞迴注意事項
要有出口,否則就是死遞迴
次數不能太多,否則就記憶體溢位
C:遞迴舉例: 我們學程式設計…
(遞迴解決問題的思想及圖解)(理解)
A:畫圖演示:遞迴解決問題的思想及圖解(5!)
(遞迴求階乘的程式碼實現及記憶體圖解)(理解)
A:案例演示
需求:求5的階乘
迴圈實現
遞迴實現
B:畫圖演示: 遞迴實現求5的階乘的記憶體圖
(不死神兔問題)(理解)
A:案例演示: 需求:兔子問題(斐波那契數列)
有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問第二十個月的兔子對數為多少?
由此可見兔子物件的資料是:1 , 1 , 2 , 3 , 5 , 8 ...
05.21_day05重點總結
陣列----儲存一組相同資料型別的容器
陣列可以儲存基本資料型別,也可以儲存引用型別
對陣列必須初始化才能使用----動態初始化,
靜態初始化
方法區—位元組碼----類的資訊–物件導向
java中記憶體用完不需要釋放,虛擬機器會自動釋放。
過程
位元組碼載入進方法區
main入棧
引用在棧裡,new後堆中開闢空間,分配一個16進位制的地址值給堆記憶體,指向空間,然後值被覆蓋。
將堆中地址值棧彈出 JVM垃圾回收器回收堆中的空間
多個引用指向同一塊空間
區域性變數:定義在方法中,或方法宣告上的變數-----形參
調屬性不要括號,調方法要括號
引用資料型別:陣列、類、介面—需要new出來的東西,在堆記憶體進行記憶體的分配和資料的初始化
引用資料型別什麼時候null,陣列置空,引用指標斷開
陣列的靜態初始化—由我們為陣列元素賦值,由系統計算陣列長度–和動態陣列區分???
公式一個元素的索引=長度-1
靜態陣列簡寫
陣列的遍歷:
arr.length.fori-----可能需要修改
arr.length.forr------需要修改
運算元組時經常會遇到的異常:
陣列角標越界異常
空指標異常
引用型別都可以:用完之後,人為置空 —有利於垃圾回收器及早回收空間 arr=null
二位陣列:存放的資料是一位陣列
沒寫了二位陣列的第二個數字—arr[0]列印的是------null
寫了二位陣列的第二個數字—arr[0]列印的是------地址
寫了二位陣列的第二個數字—arr[0]【0】列印的是------二維 陣列中的一位陣列中的元素值
陣列是引用型別,預設值是Null
相關文章
- js 一維陣列轉二維陣列JS陣列
- js 二維陣列轉一維陣列JS陣列
- PHP中二維陣列與多維陣列PHP陣列
- 二維陣列陣列
- 指標陣列和陣列指標與二維陣列指標陣列
- 二維陣列和稀疏陣列互轉陣列
- C/C++ 二維陣列的理解(多維陣列)C++陣列
- 一維陣列陣列
- Java 二維陣列轉一維Java陣列
- 二維陣列排序陣列排序
- Java二維陣列Java陣列
- vector 二維陣列陣列
- 陣列004 動態建立一維陣列陣列
- 一維多維陣列陣列
- 多維陣列轉一維陣列(降維的多種方式)陣列
- 求二維陣列中最大子陣列的和陣列
- php 二維陣列排序PHP陣列排序
- 二維陣列查詢陣列
- 二維樹狀陣列陣列
- 二維陣列行排序陣列排序
- 二維陣列練習陣列
- Java 學習筆記 二維陣列和物件陣列Java筆記陣列物件
- 多維陣列陣列
- JavaScript 學習筆記 - 多維陣列變為一維陣列JavaScript筆記陣列
- 7-蛇形二維陣列陣列
- JAVA基礎--二維陣列Java陣列
- 二維陣列的獲取陣列
- Kotlin建立二維Int陣列Kotlin陣列
- 二維陣列與指標陣列指標
- 資料結構之陣列和矩陣--矩陣&不規則二維陣列資料結構陣列矩陣
- 簡單介紹Lua一維陣列與多維陣列的使用陣列
- 二維陣列JSON.stringify 後,第二層陣列解析為空陣列JSON
- Rust與Java程式碼比較:將二維陣列轉為三維陣列RustJava陣列
- 多維陣列排序陣列排序
- 6-Java基礎語法-陣列之一維陣列Java陣列
- Java break、continue 詳解與陣列深入解析:單維陣列和多維陣列詳細教程Java陣列
- 二維陣列中的查詢陣列
- C的二維陣列(習題)陣列