第四章
1)排序問題
冒泡排序: 對兩個相鄰的數據進行比較,如果前一個數據比
後一個數據大,就交換位置,最多執行length-1趟
比較,每趟比較的次數最多爲length-i-1
選擇排序:每次把比較的第一個個數當做是最小數,如果找到後面有比
自己小的數,就記錄位置,比較完之後交換這兩個數
的位置。
使用java.util.Arrays中sort()方法和binarySearch()方法
Arrays.sort(數組的引用) :進行排序
int Arrays.binarySearch(數組的引用,數據):
該數句在數組的下標.但是該方法
必須在數組排序之後使用。
2)二維數組(隨機點名系統,學生的位置x,y)
存放一維數組的數組
int[][] a = new int[2][3];
a[0].length
a.length
int[][]
int[][][]
a)管理學生寢室
管理每層樓學生的信息
MultiArray.java
b)輸出方正矩形:
0 2 2 2 2 2
1 0 2 2 2 2
1 1 0 2 2 2
1 1 1 0 2 2
1 1 1 1 0 2
1 1 1 1 1 0
c)輸出10行楊輝三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
............
鋸齒形數組
3)System.arraycopy()
數組的長度一旦定義了,就無法修改。
所以需要arraycopy()來重新分配一個新的數組,
然後將其內容拷貝進去。
int[] a = new int[5];
int[] b = new int[5];
a=b與System.arraycopy(a,0,b,0,5)有什麼區別?
比如說我將a[1]=2;請問b[1]的值是多少?
4)使用數組模擬隊,先進先出
1/3的需求分析
1/3的coding
1/3的測試
class Queue(){
//入隊
void add(int value){}
//出隊
int remove(){}
//當前隊中元素個數
int size()
//輸出類型
void print()
}
class Student{}是以屬性爲主的類
class Queue{}是以方法爲主的類
5)可變長參數 ... 參數的個數可變
兩個int相加?
public int add(int a,int b){}
三個int相加?
public int add(int a,int b,int c){}
四個int相加?
public int add(int a,int b,int c,int d){}
五個int相加?
public int add(int a,int b,int c,int d,int e){}
..........
上面的方案代碼非常冗餘。類似的代碼重複寫。
jdk1.5之前的解決方案:通過數組解決的
public int add(int[] a){
}
add(new int[]{5,8,9});
add(new int[]{5,8});
缺點:每次都要創建新的數組,
創建數組需要在堆區開闢連續的內存空間。
參數調用之後該變量就沒用了,這樣會
浪費內存空間。
jdk1.5之後的解決方案:通過...解決的
public int add(int... a){
}
調用: add(1,4);
add(1,4,6);
add(7,6,8,89,76);
注意:1)可變長參數的使用和數組的使用是一樣
2)一個方法中只能定義一個可變長參數,
並且要定義最後一個參數。