首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 陣列操作基礎:尋找最大值與最大值索引的兩種實作模式

     編輯:Java 綜合教學

演算法核心邏輯

尋找陣列最大值的通用思路:

  1. 初始化一個變數記錄「目前最大值」或「最大值索引」
  2. 遍歷陣列,逐一比較
  3. 發現更大值時更新記錄變數
  4. 遍歷結束,記錄變數即為答案

模式一:直接記錄最大值

public static int getMax(int[] arr) {
    int max = arr[0];                    // 假設第一個元素最大
    for (int i = 1; i < arr.length; i++) { // 從第二個開始比較
        if (arr[i] > max) {
            max = arr[i];                // 更新最大值
        }
    }
    return max;
}

特點:直觀、只回傳值、無法得知位置。

模式二:記錄最大值索引 (可同時獲得值與位置)

public static int getMaxIndex(int[] arr) {
    int maxIndex = 0;                    // 假設第一個元素索引為最大
    for (int i = 1; i < arr.length; i++) {
        if (arr[i] > arr[maxIndex]) {    // 比較當前元素與「目前最大值」
            maxIndex = i;                // 更新索引
        }
    }
    return maxIndex;                     // 回傳索引,arr[maxIndex] 即最大值
}

優勢:一次遍歷同時獲得「最大值」與「所在索引」,擴充性更強。

完整可執行範例 (Java + PHP 對照)

Java 版

public class ArrayMaxDemo {
    public static void main(String[] args) {
        int[] arr = {2, 5, 4, 1};
        
        System.out.println("最大值 (模式一): " + getMax(arr));        // 5
        System.out.println("最大值索引 (模式二): " + getMaxIndex(arr)); // 1
        System.out.println("最大值 (透過索引): " + arr[getMaxIndex(arr)]); // 5
    }
    
    // 模式一
    public static int getMax(int[] arr) {
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > max) max = arr[i];
        }
        return max;
    }
    
    // 模式二
    public static int getMaxIndex(int[] arr) {
        int maxIndex = 0;
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > arr[maxIndex]) maxIndex = i;
        }
        return maxIndex;
    }
}

PHP 版 (語法對照)

<?php
class ArrayDemo {
    public static function main() {
        $arr = [2, 5, 4, 1];
        echo "模式一: " . self::getMax($arr) . "\n";           // 5
        echo "模式二索引: " . self::getMaxIndex($arr) . "\n";   // 1
        echo "模式二值: " . $arr[self::getMaxIndex($arr)] . "\n"; // 5
    }
    
    public static function getMax($arr) {
        $max = $arr[0];
        for ($i = 1; $i < count($arr); $i++) {
            if ($arr[$i] > $max) $max = $arr[$i];
        }
        return $max;
    }
    
    public static function getMaxIndex($arr) {
        $maxIndex = 0;
        for ($i = 1; $i < count($arr); $i++) {
            if ($arr[$i] > $arr[$maxIndex]) $maxIndex = $i;
        }
        return $maxIndex;
    }
}
ArrayDemo::main();

邊界條件處理

public static int getMaxSafe(int[] arr) {
    if (arr == null || arr.length == 0) {
        throw new IllegalArgumentException("陣列不可為空");
    }
    // ... 原邏輯
}

效能與擴充

  • 時間複雜度:O(n) - 單次遍歷,最優解
  • 空間複雜度:O(1) - 僅使用常數額外空間
  • 並行化:大陣列可用 Java 8 Arrays.stream(arr).parallel().max() 或 Fork/Join 框架
  • 泛型化:配合 Comparable<T> 可支援任意可比較型別

常見錯誤避坑

  • ❌ 初始化 max = 0:陣列全負數時錯誤
  • ❌ 迴圈從 i = 0 開始:多一次自我比較 (無害但多餘)
  • ❌ 忘記檢查空陣列:拋出 ArrayIndexOutOfBoundsException
  • ✅ 正確:max = arr[0] + for (int i = 1; ...) + 空檢查
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved