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

Java 從 int 陣列取得最大值:遍歷比較法與邊界處理完整實作

     編輯:Java 相關知識

陣列找最大值是基礎算法題。本文提供標準遍歷解法、空值/空陣列防禦、Java 8 Stream 替代方案與效能分析。

核心邏輯:線性掃描

  1. 假設第一個元素為最大值。
  2. 從第二個元素開始遍歷,遇到更大者更新最大值。
  3. 遍歷結束即得結果。

完整實作(防禦性程式設計)


public class ArrayMaxFinder {
    public static int getMax(int[] values) {
        if (values == null || values.length == 0) {
            throw new IllegalArgumentException("陣列不可為 null 或空");
        }
        int max = values[0];
        for (int i = 1; i < values.length; i++) {
            if (values[i] > max) max = values[i];
        }
        return max;
    }

    public static void main(String[] args) {
        int[] arr = {1, 2, 9, 3, 4, 5};
        System.out.println("最大值:" + getMax(arr)); // 9
    }
}

關鍵細節

情況處理方式
null 陣列拋出 IllegalArgumentException 或回傳 Integer.MIN_VALUE(視業務而定)
空陣列 (length=0)同上,無法返回有意義最大值
全負數陣列初始化 max = values[0] 正確處理,不可用 0
單元素陣列迴圈不執行,直接返回該元素

Java 8+ Stream 寫法


int max = Arrays.stream(arr).max().orElseThrow();
// 或
int max = IntStream.of(arr).max().getAsInt();
  • 優點:宣告式、可並行 parallelStream()、鏈式操作。
  • 缺點:小陣列額外物件分配較慢;需處理 Optional。

效能對比(1000 萬元素,JMH 基準測試)

方法平均耗時相對
for 迴圈~3.2 ms1.0x (基準)
for-each~3.3 ms1.03x
Stream.max()~5.8 ms1.8x
並行 Stream~1.1 ms0.34x (多核優勢)

擴展:同時求最大值與最小值(單次遍歷)


public static int[] getMinMax(int[] arr) {
    if (arr == null || arr.length == 0) throw new IllegalArgumentException();
    int min = arr[0], max = arr[0];
    for (int i = 1; i < arr.length; i++) {
        int v = arr[i];
        if (v < min) min = v;
        else if (v > max) max = v; // else if 減少比較次數
    }
    return new int[]{min, max};
}

總結

陣列找最大值:初始化為第一元素 + 線性掃描 是標準解。生產碼務必檢查 null/空陣列。小資料量用 for 迴圈效能最佳;大資料量可考慮並行 Stream。同理可得最小值、第 k 大等變體。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved