Java におけるコードの最適化
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
最悪のケースを表す数学的記法です。
よく使われる計算量クラス:
O(1): 定数時間 - サイズに依存しないO(1) 操作の例として、ArrayList の get() が挙げられます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²): 二次時間 - 入力サイズの2乗に比例して増加// Finding a pair of numbers that sum to a target value
// Time complexity: 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 におけるコードの最適化