Java 程式碼最佳化
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
用數學記號描述最壞情況。
常見的複雜度類別:
O(1):常數時間-與大小無關ArrayList 的 get() 是 O(1) 操作範例以下是持有 Strings 的 ArrayList 內部(簡化)實作:
public class ArrayList {}
private String[] data; // Internal array
private int size;
// Get operation - direct array access
public String get(int index) {
return data[index]; // O(1)
}
}
用數學記號描述最壞情況
常見的複雜度類別:
O(1):常數時間-與大小無關O(n):線性時間-隨輸入成長ArrayList 的 contains()public boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) {
// Linear search through array
for (int i = 0; i < size; i++) {
if (o.equals(elementData[i])) {
return i;
}
}
return -1; // Not found
}
用數學記號描述最壞情況
常見的複雜度類別:
O(1):常數時間-與大小無關O(n):線性時間-隨輸入成長O(n²):平方時間-隨輸入平方成長// 找出和為目標值的一對數字
// 時間複雜度:O(n²)
public int[] findPairWithSum(ArrayList<Integer> numbers, int targetSum) {
for (int i = 0; i < numbers.size(); i++) {
for (int j = i + 1; j < numbers.size(); j++) {
if (numbers.get(i) + numbers.get(j) == targetSum) {
console.log("Found them!")
}
}
}
}
輸入規模的影響:
O(1):1,000 -> 1,000,000 筆=時間相同!O(n):1,000 -> 1,000,000 筆=慢 1,000×O(n²):1,000 -> 1,000,000 筆=慢 1,000,000×
Java 程式碼最佳化