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

《Thinking in Java》閱讀筆記(16):數組深度解析——為什麼數組特別?

     編輯:Java 相關知識

數組的三大特殊性

  1. 效率最高:JVM 內建優化,隨機訪問 O(1)
  2. 類型確定:編譯期確定持有類型,運行期強制類型安全
  3. 可存基本類型:集合需裝箱,數組直接存 int[]、double[] 等

代價:長度不可變,創建即固定。

數組是第一類對象

  • 數組標識符是引用,指向堆上真實對象
  • 擁有 length 字段(非方法)表示容量
  • 可作為方法返回值、參數傳遞,GC 自動回收

多維數組本質

Java 無真正多維數組,int[][] 是「數組的數組」,每行長度可不同(不規則數組)。

int[][] triangle = new int[5][];
for (int i = 0; i < triangle.length; i++) triangle[i] = new int[i + 1];

數組與泛型的不兼容

  • 不可實例化泛型數組:new List<String>[10] 編譯報錯
  • 原因:類型擦除導致運行期無法知道確切類型,數組需運行期知曉類型以強制檢查
  • 變通:List<String>[] arr = (List<String>[]) new List[10];(非受檢轉換,有堆污染風險)
  • 最佳實踐:優先用 List<List<T>> 替代泛型數組

Arrays 工具類六大核心方法

方法用途
equals()比較兩數組長度與對應元素皆相等
fill()填充指定值
sort()基本類型雙軸快排、對象穩定歸併排序
binarySearch()有序數組二分查找,無序結果不可預測
toString()/deepToString()可讀性輸出,支援多維
hashCode()計算數組哈希碼

數組複製:System.arraycopy

  • native 方法,極快
  • 對象數組僅複製引用,不複製對象本身(淺拷貝)

比較器策略模式

  • Arrays.sort(arr, comparator) 注入比較策略
  • 基本類型無法直接用 Comparator,需包裝類或自定義邏輯

測試數據生成器模式

interface Generator<T> { T next(); }
class CountingGenerator implements Generator<Integer> { ... }
Arrays.fill(arr, gen.next());  // 僅能填充單值,靈活性有限
// 推薦:for 循環調用 gen.next() 填充

總結

數組是 Java 性能基石,但長度固定、泛型不兼容。日常開發優先選 ArrayList,僅在性能極敏感、長度固定、存基本類型時直接用數組。

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