數組
數組概念: 數組就是用於存儲數據的長度固定的容器,多個數據的數據類型要一致。html
百科:數組(array),就是相同數據類型的元素按必定順序排列的集合,就是把有限個類型相同的變量用一個名字命名,以便統一管理他們,而後用編號區分他們,這個名字稱爲數組名,編號稱爲下標或索引(index)。組成數組的各個變量稱爲數組的元素(element)。數組中元素的個數稱爲數組的長度(length)。數組
數組的特色:url
一、數組的長度一旦肯定就不能修改spa
二、建立數組時會在堆內存中開闢一整塊連續的空間。.net
三、存取元素的速度快,由於能夠經過[下標],直接定位到任意一個元素。指針
數組的聲明:
//推薦
元素的數據類型[] 一維數組的名稱;code
//不推薦
元素的數據類型 一維數組名[];htm
靜態初始化
1)數據類型[] 數組名 = {元素1,元素2,元素3...}; //必須在一個語句中完成,不能分開兩個語句寫對象
2)數據類型[] 數組名 = new 數據類型[]{元素1,元素2,元素3...};
或
數據類型[] 數組名;
數組名 = new 數據類型[]{元素1,元素2,元素3...};blog
注意:後面有{}指定元素,就不須要在[長度]指定長度。 //長度由元素個數自動定義
動態初始化
數組數據類型[] 數組名字 = new 數組數據類型[長度];
或
數組數據類型[] 數組名字;
數組名字 = new 數組數據類型[長度];
-
元素的類型能夠是任意的Java的數據類型。例如:int, String, Student等
-
[] : 表示數組。
-
數組名字:爲定義的數組起個變量名,知足標識符規範,可使用名字操做數組。
-
new:關鍵字,建立數組使用的關鍵字。由於數組自己是引用數據類型,因此要用new建立數組對象。//new至關於運算符,存放在堆內存中
-
[長度]:數組的長度,表示數組容器中能夠存儲多少個元素。
-
注意:數組有定長特性,長度一旦指定,不可更改。
數組元素的訪問
索引: 每個存儲到數組的元素,都會自動的擁有一個編號,從0開始,這個自動編號稱爲數組索引(index),能夠經過數組的索引訪問到數組中的元素。
索引範圍:[0, 數組的長度-1] //數組名記錄着數組元素首地址的值,下標0-數組名.length-1表示距離首地址的距離
數組名[索引]
索引訪問數組中的元素:
-
數組名[索引]=數值,爲數組中的元素賦值
-
變量=數組名[索引],獲取出數組中的元素
數組的遍歷
數組的長度屬性: 每一個數組都具備長度,並且是固定的,Java中賦予了數組的一個屬性,能夠獲取到數組的長度,語句爲:數組名.length
,屬性length的執行結果是數組的長度,int類型結果。由此能夠推斷出,數組的最大索引值爲數組名.length-1
。
for(int i=0; i<arr.length; i++){
System.out.println(arr[i]);
}
for(int x:arr){ //for加強版,專門用於數組的訪問(類型爲要訪問的數組類型)
System.out.print(x);
}
數組元素的默認值
數組內存圖
內存是計算機中重要的部件之一,它是與CPU進行溝通的橋樑。其做用是用於暫時存放CPU中的運算數據,以及與硬盤等外部存儲器交換的數據。只要計算機在運行中,CPU就會把須要運算的數據調到內存中進行運算,當運算完成後CPU再將結果傳送出來。咱們編寫的程序是存放在硬盤中的,在硬盤中的程序是不會運行的,必須放進內存中才能運行,運行完畢後會清空內存。
Java虛擬機要運行程序,必需要對內存進行空間的分配和管理。
理解Java虛擬機對變量,數組,方法等的內存管理方式很是有助於理解程序的運行機制,便於編寫程序時變量的賦值與方法的調用。更多關於Java虛擬機的內存管理機制請看Java虛擬機篇
int[] arr = new int[3];
數組統計:求總和、均值、統計偶數個數等
思路:遍歷數組,挨個的累加,判斷每個元素
數組找最值
(1)先假設第一個元素最大/最小
(2)而後用max/min與後面的元素一一比較
數組中找最值及其下標
(1)先找最大值
①假設第一個元素最大
②用max與後面的元素一一比較
(2)遍歷數組,看哪些元素和最大值是同樣的
冒泡排序
1)依次比較相鄰的兩個數,將小數放到前面,大數放到後面。
2)須要比較數組.length-1輪 //設i=1,i<arr.length
for(int i = 1;i < arr.length;i++){
boolean flag = true;
for(int j = 0;j < arr.length - i - 1;j++){
if(arr[j] > arr[j + 1]{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = false;
}
}
if(flag){
break;
}
}
二維數組
-
二維數組:本質上就是元素爲一維數組的一個數組。
-
二維數組的標記:[][]
二維數組也能夠當作一個二維表,行*列組成的二維表,只不過這個二維表,每一行的列數還可能不一樣。可是每個單元格中的元素的數據類型是一致的
語法格式:
//推薦
元素的數據類型[][] 二維數組的名稱;
//不推薦
元素的數據類型 二維數組名[][];
//不推薦
元素的數據類型[] 二維數組名[];
靜態初始化:
元素的數據類型[][] 二維數組名 = new 元素的數據類型[][]{
{元素1,元素2,元素3 。。。},
{第二行的值列表},
{第n行的值列表}
};
元素的數據類型[][] 二維數組名;
二維數組名 = new 元素的數據類型[][]{
{元素1,元素2,元素3 。。。},
{第二行的值列表},
{第n行的值列表}
};
//如下格式要求聲明與靜態初始化必須一塊兒完成
元素的數據類型[][] 二維數組的名稱 = {
{元素1,元素2,元素3 。。。},
{第二行的值列表},
{第n行的值列表}
};
若是是靜態初始化,右邊new 數據類型[][]中不能寫數字,由於行數和列數,由{}的元素個數決定
動態初始化(規則二維表:每一行的列數是相同的)
(1)肯定行數和列數
元素的數據類型[][] 二維數組名 = new 元素的數據類型[m][n];
m:表示這個二維數組有多少個一維數組。或者說一共二維表有幾行
n:表示每個一維數組的元素有多少個。或者說每一行共有一個單元格
//此時建立完數組,行數、列數肯定,並且元素也都有默認值
(2)再爲元素賦新值
二維數組名[行下標][列下標] = 值;
動態初始化(不規則:每一行的列數可能不同)
(1)先肯定總行數
元素的數據類型[][] 二維數組名 = new 元素的數據類型[總行數][];
//此時只是肯定了總行數,每一行裏面如今是null
(2)再肯定每一行的列數
二維數組名[行下標] = new 元素的數據類型[該行的總列數];
//此時已經new完的行的元素就有默認值了,沒有new的行仍是null
(3)再爲元素賦值
二維數組名[行下標][列下標] = 值;
表示方式
二維數組名.length
二維數組名[行下標].length
二維數組名[行下標][列下標]
二維數組的遍歷
for(int i=0; i<二維數組名.length; i++){
for(int j=0; j<二維數組名[i].length; j++){
System.out.print(二維數組名[i][j]);
}
System.out.println();
}
ArrayIndexOutOfBoundsException
數組越界異常。
NullPointerException
空指針異常。