一、初步認識數(shù)組
1.理解數(shù)組
Java提供了數(shù)組這種數(shù)據(jù)結(jié)構(gòu),主要可以將大量的數(shù)據(jù)存儲起來
定義:數(shù)組是用來存儲相兼容數(shù)據(jù)類型的定長的容器
2.數(shù)組的特點
a.數(shù)組中只能存放相兼容類型的數(shù)據(jù),不能存放多種類型的數(shù)據(jù)
b.數(shù)組中既可以存儲基本數(shù)據(jù)類型,也可以存儲引用數(shù)據(jù)類型
c.數(shù)組是定長的,一旦一個數(shù)組被初始化,那么這個數(shù)組的長度就不能再發(fā)生改變
d.數(shù)組相當于是一個容器
e.數(shù)組中存儲的數(shù)據(jù)被稱為元素
3.使用數(shù)組的好處
可以自動的給存儲到數(shù)組中的數(shù)據(jù)進行編號,從0開始,方便操作數(shù)據(jù)
這些編號就被稱為下標,角標,或者索引
編號和數(shù)據(jù)之間存在著一一對應(yīng)的關(guān)系,通過編號,就可以直接找到相對應(yīng)的數(shù)據(jù) ??
4.數(shù)組的定義
注意:數(shù)組屬于引用數(shù)據(jù)類型,本身仍然是一種數(shù)據(jù)類型,所以可以定義數(shù)組變量
數(shù)據(jù)類型 變量名稱 = 初始值;
方式一:數(shù)據(jù)類型[] 數(shù)組名稱;
方式二:數(shù)據(jù)類型 數(shù)組名稱[];
推薦使用方式一,c#已經(jīng)不支持方式二定義數(shù)組
int x = 10;
int[] a;
int a[];
說明:int是一種基本數(shù)據(jù)類型,int[]是數(shù)組類型,在這里,int表示數(shù)組中存儲的元素的數(shù)據(jù)類型
二、數(shù)組的初始化
所謂初始化,Java中的數(shù)據(jù)必須先進行初始化,然后才能使用,為數(shù)組中的元素分配內(nèi)存空間,并為每個元素賦初始值
1.靜態(tài)初始化
初始化時由程序員指定每個元素的初始值,由系統(tǒng)計算數(shù)組的長度
語法:數(shù)組元素類型[] 數(shù)組名稱 = new 數(shù)組元素類型[]{元素1,元素2.。。。。};
例如:int[] arr = new int[]{10,20,30,40};
? ? 可簡寫為int[] arr = {10,20,30,40};
說明:任何一個變量都需要由自己確定的數(shù)據(jù)類型,這里的arr表示是數(shù)組變量名稱,int表示數(shù)組中元素的類型,int[]表示數(shù)組類型
2.動態(tài)初始化
初始化時由程序員指定數(shù)組的長度,由系統(tǒng)分配初始值
語法:數(shù)組元素類型[] 數(shù)組名稱 = new 數(shù)組元素類型[元素的個數(shù)或者數(shù)組的長度];
初始值的分配規(guī)則:
整型? 0
浮點型? ? 0.0
字符型 \u0000? 【空格,方框】
布爾類型? ? false
引用數(shù)據(jù)類型? null
注意:
a.在初始化數(shù)組時,不要靜態(tài)初始化和動態(tài)初始化同時使用,【不要在進行數(shù)組初始化時,既指定數(shù)組的長度,而且給每個元素賦初始值】
b.既然數(shù)組也是一種數(shù)據(jù)類型,所以在定義數(shù)組的時候,也可以先聲明,然后再初始化
? ? 舉例:
? ? int x;
? ? x = 10;
? ? int[] socres;
? ? socres = new int[10];
三、數(shù)組的使用
1.訪問數(shù)組的元素值
通過下標【索引】
語法:數(shù)組名稱[下標]
2.獲取數(shù)組中的元素個數(shù)【數(shù)組的長度】
在Java中,所有的數(shù)組都提供了一個length屬性,通過這個屬性可以訪問數(shù)組的長度或者元素的個數(shù)
語法:數(shù)組名稱.length
3.給數(shù)組元素賦值或者修改值
4.遍歷數(shù)組
遍歷:依次訪問數(shù)組中的每一個元素【通過不同的下標獲取各自對應(yīng)的值】
? ? 1>簡單for循環(huán)【while循環(huán)】
? ? 2>增強for循環(huán)【foreach循環(huán)】
? ? ? ? JDK1.5之后新增的
? ? ? ? 優(yōu)點:用于遍歷數(shù)組和集合,無需下標,就可以直接獲取數(shù)組或者集合中的元素
? ? 語法:
? ? for(數(shù)組元素類型 變量名 :數(shù)組或者集合名稱) {
? ? ? ? //循環(huán)體
? ? }
四、內(nèi)存中的數(shù)組
數(shù)組是一種引用數(shù)據(jù)類型,數(shù)組引用變量其實就是一個引用,數(shù)組元素和引用在內(nèi)存中是分開存放
數(shù)組引用變量可以指向任何有效的內(nèi)存空間,只有當該引用指向有效的空間之后,才可以通過這個引用操作數(shù)組中的的元素,當引用賦值為null,表示該引用指向了一個無效的空間
數(shù)組的引用變量存儲于??臻g中,被new出來的實際的數(shù)組存儲于堆空間中
總結(jié):對于引用數(shù)據(jù)類型,當兩個引用變量指向同一塊內(nèi)存空間時,當修改一個變量的值時,另外一個也跟著變化
擴展:內(nèi)存的分類
a.寄存器,最快的一塊存儲區(qū),由編譯器根據(jù)需求進行分配,我們在程序中無法控制
b.棧:存放基本數(shù)據(jù)類型的變量以及引用數(shù)據(jù)類型的引用
? ? 特點:先進后出,后進先出,被執(zhí)行完成之后,該函數(shù)或者語句中的變量將被銷毀,所占用的空間將會被釋放
c.堆:存放所有使用new關(guān)鍵字創(chuàng)建出來的實體
? ? 特點;執(zhí)行完之后不會立即被釋放,當使用完成之后,會被標記上垃圾的標記,等待系統(tǒng)的垃圾回收機制回收它
d.方法區(qū):
? ? 靜態(tài)域:存放靜態(tài)變量【static】
? ? 常量池:存放字符串常量和基本數(shù)據(jù)類型的常量
? ? int[] arr = {235,54};
? ? String str = "hello world";
五、數(shù)組的應(yīng)用
1.排序
冒泡排序
? ? 排序思路:比較兩個相鄰的下標對應(yīng)的元素,如果符合條件就交換位置【最值出現(xiàn)在最右邊】
選擇
? ? 排序思路:固定一個下標,然后使用這個下標對應(yīng)的元素和其余的元素進行比較,如果符合條件就交換位置【最值出現(xiàn)在最左邊】
2.查找
順序查找
? ? ? ? 將要查找的數(shù)據(jù)和數(shù)組中的元素進行一一的比對,如果相等,說明查找到了
二分法查找
? ? ? ? 前提條件:數(shù)組必須是有序的
? ? ? ? 查找思路:通過折半來縮小查找范圍【以升序為例,將待查找的數(shù)據(jù)與中間下標對應(yīng)的元素進行比較,如果中間下標對應(yīng)的元素大于待查找的元素的話,說明待查找的元素在前半部分】
數(shù)組優(yōu)缺點總結(jié)
優(yōu)點:1、按照索引查詢元素速度快2、能存儲大量數(shù)據(jù)3、按照索引遍歷數(shù)組方便缺點:1、根據(jù)內(nèi)容查找元素速度慢2、數(shù)組的大小一經(jīng)確定不能改變。3、數(shù)組只能存儲一種類型的數(shù)據(jù)4、增加、刪除元素效率慢5、未封...
優(yōu)點:數(shù)組定義簡單,而且訪問很方便缺點:數(shù)組中所有元素類型都必須相同 數(shù)組大小必須定義時給出,而且大多數(shù)情況下,數(shù)組空間的大小一旦確定后就不能更改 數(shù)組的空間必須是連續(xù)的,這就造成數(shù)組在內(nèi)存中分配空間...