🍊 Java學(xué)習(xí):社區(qū)快速通道
1 數(shù)組
1.1 概述
數(shù)組是相同數(shù)據(jù)類型的多個(gè)數(shù)據(jù)的容器,。
這些元素按線性順序排列。所謂線性順序是指除第一個(gè)元素外,每一個(gè)元素都有唯一的前驅(qū)元素;除最后一個(gè)元素外,每一個(gè)元素都有唯一的后繼元素,。(“簡(jiǎn)單理解就是:一個(gè)跟一個(gè)順序排列”)
1.2 創(chuàng)建格式
- 格式 1. 數(shù)據(jù)類型[] 數(shù)組名稱 = new 數(shù)據(jù)類型[數(shù)組長(zhǎng)度];
int[] a = new int[];
- 格式 2. 數(shù)據(jù)類型[] 數(shù)組名稱 = {數(shù)組內(nèi)容 1,數(shù)組內(nèi)容 2,數(shù)組內(nèi)容 3…數(shù)組內(nèi)容 n};
int[] a = {1, 2, 3};
- 格式 3. 數(shù)據(jù)類型[] 數(shù)組名;
- 格式 3. 屬于只創(chuàng)建了數(shù)組引用名, 并未在內(nèi)存創(chuàng)建數(shù)組空間,。
int[] a;
- 格式 4. 數(shù)據(jù)類型[] 數(shù)組名稱 = new 數(shù)據(jù)類型[]{內(nèi)容 1,內(nèi)容 2,內(nèi)容 3…內(nèi)容 n};
int[] a = new int[]{1, 2, 3};
1.3 下標(biāo)
可以理解為數(shù)組中內(nèi)容的數(shù)字序號(hào),從 0 開始 ,對(duì)于長(zhǎng)度為 n 的數(shù)組,下標(biāo)的范圍是 0~n-1。
可以通過下標(biāo)的方式訪問數(shù)組中的每一個(gè)元素
1.4 數(shù)組長(zhǎng)度獲取
數(shù)組名稱.length
1.5 注意
使用數(shù)組不當(dāng), 會(huì)出現(xiàn)如下問題:
- 數(shù)組未賦值: 空指針異常
- 超出長(zhǎng)度的下標(biāo)操作: 數(shù)組越界異常
注意:數(shù)組的長(zhǎng)度在創(chuàng)建時(shí)就固定了,。
2 數(shù)組常用算法
2.1 冒泡排序
2.1.1 原理
- 比較相鄰的元素,。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。
- 對(duì)每一對(duì)相鄰元素做同樣的工作,從開始第一對(duì)到結(jié)尾的最后一對(duì),。在這一點(diǎn),最后的元素應(yīng)該會(huì)是最大的數(shù),。
- 針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。
- 持續(xù)每次對(duì)越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較,。
2.1.2 名稱由來
是因?yàn)樽钚?#xff08;或最大)的元素會(huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端(降序或升序),就如同水中的氣泡最終會(huì)上浮到頂端一樣,故名“冒泡排序”,。
2.1.3 口訣
升序:
- N個(gè)數(shù)字來排隊(duì)
- 兩兩相比小靠前,
- 外層 循環(huán)
length - 1
- 內(nèi)層循環(huán)
length - i - 1
降序:
- N個(gè)數(shù)字來排隊(duì)
- 兩兩相比大靠前,
- 外層 循環(huán)
length - 1
- 內(nèi)層循環(huán)
length - i - 1
private static void sort(int[] numbers) {
for (int i = 0; i < numbers.length - 1; i++) {
for (int j = 0; j < numbers.length - 1 - i; j++) {
if (numbers[j] > numbers[j + 1])
swap(numbers, j, j + 1);
}
}
}
2.2 二分查找
2.2.1 概述
二分查找也稱折半查找(Binary Search),它是一種效率較高的查找方法。但是,二分查找要求數(shù)組數(shù)據(jù)必須采用順序存儲(chǔ)結(jié)構(gòu)有序排列,。
2.2.2 原理
假設(shè)數(shù)組中元素是按升序排列,將數(shù)組中間位置的數(shù)據(jù)與查找數(shù)據(jù)比較,如果兩者相等,則查找成功;否則利用中間位置記錄將數(shù)組分成前,、后兩個(gè)子數(shù)組,如果中間位置數(shù)據(jù)大于查找數(shù)據(jù),則進(jìn)一步查找前子數(shù)組,否則進(jìn)一步查找后子數(shù)組。
重復(fù)以上過程,直到找到滿足條件的數(shù)據(jù),則表示查找成功,直到子數(shù)組不存在為止,表示查找不成功,。
private static void binarySearch(int[] numbers, int target){
int l = 0;
int r = numbers.length - 1;
while (l < r){
int mid = l + (r - l) / 2;
if (numbers[mid] == target){
System.out.println("排序后,6的索引是:" + mid);
return;
}else if(numbers[mid] > target){
mid = r;
}else {
mid = l;
}
}
}