Java數(shù)組的理解與運用
1、什么是數(shù)組?
? ? ? 數(shù)組是用來存放多個相同類型的變量的集合體。在內(nèi)存中是連續(xù)存儲的。
? ? ? 可以理解為:定義了一個數(shù)組就相當于一次定義了相同類型的多個變量。
? ? ? 如:int a[] ={5,6,7,8}; 就是一次定義了4個int型的變量,其值為:5,6,7,8。
2.什么是數(shù)組元素?
? ? 構(gòu)成數(shù)組的每一個變量就稱為一個數(shù)組元素。通常通過數(shù)組下標來表示。
3.什么是數(shù)組下標?
? ? ? 下標就是數(shù)組元素在數(shù)組中的位置。在一個數(shù)組中下標是從0開始,依次累加1到數(shù)組長度減1。特別注意不是從1開始而是從0開始的。
? ? ? 如:int a[] ={5,6,7,8}; a[0]=5,a[1]=6,a[2]=7,? a[3]=8;
4.什么是數(shù)組長度?
? ? ? 數(shù)組長度就是數(shù)組中元素的個數(shù)。
? ? ? 數(shù)組長度也叫數(shù)組大小。
? ? ?獲取數(shù)組長度的方法:數(shù)組名.length
? ? ?如:int a[] ={5,6,7,8}; 數(shù)組長度為:a.length =4。
? ? ?注意:數(shù)組長度是在為數(shù)組元素分配內(nèi)存是就確定的大小,一旦確定就不可在改變。
5.一維數(shù)組使用
? ? ?數(shù)組使用分為四步:
? ? (1)定義數(shù)組
? ? ? ? ?數(shù)據(jù)類型 數(shù)組名 [ ];? 或? 數(shù)據(jù)類型 [ ]? 數(shù)組名;
? ? ? ? ?例如 :int score[ ];? ? ?或? int [ ] score;
? ? ? ? 語法解析:
? ? ? ? ? 1.數(shù)組是什么數(shù)據(jù)的類型,數(shù)組元素就是就是什么數(shù)據(jù)類型。
? ? ? ? ? 2.數(shù)組的特征是 [ ]。
? ? ? ? ? 3.數(shù)組是引用類型。
? ? ? ? ? ? ? ? 定義數(shù)組本質(zhì)就是想JVM申請內(nèi)存,JVM將內(nèi)存分為方法區(qū)、堆、棧三部分,不同部分存儲不同類型數(shù)據(jù)。定義數(shù)組時,JVM將數(shù)組名稱存儲在棧中,棧是一個先進后出的數(shù)據(jù)結(jié)構(gòu)。數(shù)組內(nèi)容則是存儲在堆中的數(shù)組元素的首地址(用首地址代表存放數(shù)組元素的整塊地址)。
? ? ? ?(2)為數(shù)組元素分配內(nèi)存
? ? ? ? ? ? 聲明數(shù)組時僅指定了數(shù)組名稱和元素的類型,并沒有指定數(shù)組個數(shù),也沒有為數(shù)組元素分配內(nèi)存,所以無法使用數(shù)組存儲元素。想要系統(tǒng)為數(shù)組元素分配存儲空間,就必須指出數(shù)組元素個數(shù),并通過new運算符為數(shù)組元素分配空間。(通過new運算符分配的元素都存儲在堆中)
????????????為數(shù)組元素分配內(nèi)存空間語法格式:
????????????????????數(shù)組名 = new 數(shù)據(jù)類型[數(shù)組長度];
????????????????????例如:score = new int [5](score 數(shù)組中有int 型的5個數(shù)據(jù))
????????????????????注:(1)和(2)合并在一起寫: int []score = new int [5];? 此時數(shù)組長度已定為? ? ? ? ? ? ? ? ? ?????5,永不可改。
? ? ? ?(3)數(shù)組元素初始化
? ? ? ? ? ? ? ? ? ? 數(shù)組聲明并為數(shù)組元素分配空間后,必須為數(shù)組元素初始化(賦值)后才能使用數(shù)組。如果沒有為數(shù)組初始化,數(shù)組元素也有默認值如下表:

? ? 一般通過數(shù)組下標為數(shù)組元素初始化。
????????????例如:
????????????????score[0][=60;? ?
????????????????score[1]=70;? ? ......
????????????????score[4]=90;
????????????????注:(1)、(2)、(3)也可以合在一起寫: int [ ]score = new int[ ]{60,54,63,25};? 或? int score[ ] = ????????????new int[ ]{60,54,63,25};? ?或 int [ ]score ={60,54,63,25};? 特別注意在這三個方式中[]里面皆不可再寫長度。
? ?(4)使用數(shù)組:
????????一般使用數(shù)組求最大值,最小值,平均值,求和以及排序和查找等。
????????例如:創(chuàng)建一個成績的數(shù)據(jù),統(tǒng)計最大值,最小值,平均值,求和。
public static void main(String[] args) {
? ? ? ? Scanner s = new Scanner(System.in);
? ? ? ? int []score = new int[5];
? ? ? ? //成績初始化
? ? ? ? for (int i = 0; i < score.length; i++) {
? ? ? ? ? ? System.out.println("請輸入第"+(i+1)+"個學(xué)生的成績");
? ? ? ? ? ? score[i]= s.nextInt();
? ? ? ? }
? ? ? ? //求最高分,求最低分
? ? ? ? int max? = score[0];
? ? ? ? int min = score[0];
? ? ? ? for (int i = 1; i < score.length; i++) {
? ? ? ? ? ? if(max<score[i]){
? ? ? ? ? ? ? ? max = score[i];
? ? ? ? ? ? }
? ? ? ? ? ? if(min>score[i]){
? ? ? ? ? ? ? ? min = score[i];
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? System.out.println("最高分為"+max);
? ? ? ? System.out.println("最低分為"+min);
? ? ? ? //總分
? ? ? ? int sum = 0;
? ? ? ? for (int i = 0; i < score.length; i++) {
? ? ? ? ? ? sum += score[i];
? ? ? ? }
? ? ? ? System.out.println("班級總分:"+sum);
? ? ? ? System.out.println("班級平均分"+sum/score.length);
? ? }
排序中常用冒泡、選擇、插入排序等。
冒泡排序:


選擇排序:


插入排序:


查找一般使用二分法:
注意:二分查找是先排序之后在查找。
排序:

查找:

結(jié)果:


數(shù)組的工具類Arrays:
1.判斷兩個數(shù)組是否相等:Arrays.equals()??


2.將數(shù)組轉(zhuǎn)換成字符串:Arrays.toString()

結(jié)果:

3.對數(shù)組元素進行升序排序:Arrays.sort()

結(jié)果:

4.將數(shù)組所有元素賦值為相同的值:Arrays.fill(數(shù)組,值);

結(jié)果:

5.將數(shù)組賦值成一個長度為設(shè)定值的新數(shù)組:Arrays.copyOf(數(shù)組,長度)

結(jié)果:

6.查詢元素在數(shù)組中的下標:Arrays.binarySearch(數(shù)組,查找值)

結(jié)果:

分析:
若找到了數(shù)據(jù),則返回該數(shù)據(jù)的下標
若找不到數(shù)據(jù),則返回負數(shù),其值為該數(shù)據(jù)在數(shù)組中排序的位置
二維數(shù)組使用:
語法與一維數(shù)組類似
(1)定義數(shù)組
? ? ? ? ?數(shù)據(jù)類型 數(shù)組名 [ ][ ];? 或? 數(shù)據(jù)類型 [ ] [ ] 數(shù)組名;
? ? ? ? ?例如 :int score[ ][ ];? ? ?或? int [ ] [ ]score;
????????????[ ] [ ]表示二維,第一個[ ] 表示第一維,第二個[ ] 表示第二維。
? ? ? ?(2)為數(shù)組元素分配內(nèi)存
????????????int score[ ][ ];
????????????score=new int[3][3];? //三行三列共九個數(shù)據(jù)
? ? ? ?(3)數(shù)組元素初始化
?????????????int score[ ][ ]=new int[ ][ ]{{1,2,3},{4,5,6},{7,8,9}};或?
? ? ? ? ? ? ?int score[ ][ ]={{1,2,3},{4,5,6},{7,8,9}};
? ?(4)使用數(shù)組:
有三個班級,每個班級3名學(xué)生,計算班級總成績:

結(jié)果:
