1.陣列
比如我要統計每位員工的工資,我得定義多個變數去分開儲存,因爲一個變數只能儲存一個數據,如果過多的員工, 太麻煩,那麼我怎麼用一個變數去儲存多個員工工資呢?
可以使用陣列,陣列就是一個大的容器,他可以儲存多個值
陣列的概念:陣列和變數差不多,都是存放數據的,不同的是變數只能儲存一條數據,而陣列可以儲存多條數據,前提是這個多條數據必須是同一型別的。
陣列既可以儲存基本數據型別,也可以儲存參照數據型別
2.一維陣列的定義
陣列型別[] 陣列名;
如果定義好陣列以後,必須要給陣列進行初始化。
陣列一旦初始化,長度不可變。長度確定下來了。
3.陣列的初始化
(1)動態初始化:指定陣列的長度,一旦長度指定,就是陣列中只能存放多少數據
兩種格式:
①陣列型別[] 陣列名=new 陣列型別[陣列長度];
int[] array=new int[9];
②陣列型別[] 陣列名;
陣列名=new 陣列型別[陣列長度];
double[] array1;
array1=new double[10];
(2)靜態初始化:不是指定陣列長度,而是直接在初始化陣列的同時給陣列賦值
兩種格式:
①陣列型別[] 陣列名=new 陣列型別[]{數據1,數據2……};
int[] array2=new int[]{8,9,45,20,19};
②陣列型別[] 陣列名;
陣列名=new 陣列型別[]{數據1,數據2……};
int[] array3;
array3=new int[]{67,89,90,1,34};
(3)還有一種最簡單的方式:
陣列型別[] 陣列名={數據1,數據2……};
int[] array4={12,3,4,6,2};
4.陣列常見問題
(1)//陣列越界異常:ArrayIndexOutOfBoundsException
int[] a=new int[2];
//System.out.println(a[2]=10);//錯誤的
(2)//空指針異常:NullPointerException
int[] b=null;
System.out.println(b[0]);
5.陣列的分類
(1)基本數據型別的陣列
動態初始化陣列以後,陣列的元素都會賦予一個預設值
byte 0
short 0
int 0
long 0
double0.0
float 0.0
char 空格
boolean false
(2)參照數據型別的陣列
String 介面 自己定義的類
參照數據型別的預設值爲null
6.java中記憶體的分配
記憶體的申請和釋放都是jvm進行管理的,java程式要執行,jvm會自動的向電腦申請一塊記憶體,
把這塊記憶體分爲5部分:
①棧(Stack):主要存放區域性變數(重點)
②堆(Heap):凡是new出來的東西都在堆裏面,堆裏面的數據都有預設原則:(重點) 整數:0,小數:0.0,布爾:false,char:空格,參照數據型別:null
③方法區(Method Area):存放的是與.class相關的資訊
④本地方法區(Native Method Area):與操作系統有關
⑤暫存器(Register):與cpu有關
7.陣列獲取最值
public static void main(String[] args) {
//1.求出學生成績的總分、平均分、最高分、最低分
int[] score=new int[]{90,89,56,87,98};
//總分
int sum=0;
for(int i=0;i<score.length;i++){
sum+=score[i];
}
System.out.println("總分:"+sum);
//平均分
int avg=sum/score.length;
System.out.println("平均分:"+avg);
//最高分
int max=score[0];
for(int i=0;i<score.length;i++){
if(max<score[i]){
max=score[i];
}
}
System.out.println("最高分:"+max);
//最低分
int min=score[0];
for(int i=0;i<score.length;i++){
if(min>score[i]){
min=score[i];
}
}
System.out.println("最低分:"+min);
}
8.陣列元素逆序
public static void main(String[] args) {
//2.{"C語言","C++","C#","Java","Python"};逆序輸出
String[] str=new String[]{"C語言","C++","C#","Java","Python"};
for(int i=0;i<str.length/2;i++){
String temp=str[i];
str[i]=str[str.length-1-i];
str[str.length-1-i]=temp;
}
for(String s:str){
System.out.println(s);
}
}
9.氣泡排序(重點)
口訣(升序)
n個數字來排隊,兩兩想比小靠前,外層回圈n-1,內層回圈n-1-i
public static void main(String[] args) {
//從大到小
int[] array={76,3,234,90,6,78,1,-1};
//外層回圈控制趟數
for(int i=0;i<array.length-1;i++){
//內層控制次數
for(int j=0;j<array.length-i-1;j++){
//比較 從大到小用< 從小到大用>
if(array[j]<array[j+1]){
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
for(int num:array){
System.out.println(num);
}
}
10.二維陣列
陣列中的陣列
(1)宣告二維陣列:
數據型別[][] 陣列名;
第一個中括號:二維陣列中有幾個一維陣列 行
第二個中括號:每個一維陣列有多少元素 列
(2)初始化二維陣列
①動態初始化
②靜態初始化
public static void main(String[] args) {
//1.建立一個二維陣列,並動態初始化
//5代表5行或者表示包含5個一維陣列
//7代表7列或者表示每個一維陣列的長度是7
int[][] array=new int[5][7];
//2.如何賦值
//第一個一維陣列的第一個元素值爲10
array[0][0]=10;
//第四個一維陣列的第七個元素值爲5
array[3][6]=5;
System.out.println(array[0][0]);
System.out.println(array[2][0]);
//3.靜態初始化
int[][] array1=new int[][]{{1,2},{2,3,4},{5,9,89,1}};
System.out.println(array1[2][2]);//89
//簡寫
int[][] array2={{4,90},{23,12},{12,23,45}};
System.out.println("獲取二維陣列的長度:"+array2.length);
//4.遍歷二維陣列
//外層回圈:控制行(每一個一維陣列)
for(int i=0;i<array2.length;i++){
//內層回圈控制的是列
for(int j=0;j<array2[i].length;j++){
System.out.print(array2[i][j]+" ");
}
System.out.println();
}
System.out.println("使用增強for回圈=============");
for(int[] i:array2){
for(int a:i){
System.out.print(a+" ");
}
System.out.println();
}
}