0 前言
此類包含用于操縱數組的各種方法(例如排序和搜尋)。 此類還包含一個靜态工廠,該工廠允許将數組視為清單。
如果指定的數組引用為null,則除非另有說明,否則此類中的方法都抛出NullPointerException。
此類中所包含方法的文檔包括對實作的簡要說明。 此類描述應被視為實作的說明,而不是标準。隻要遵守規範本身,實作者就可以随意替換其他算法.(例如sort(Object[] 使用的算法不必是MergeSort,但必須是穩定的。)
此類是Java Collections Framework的成員。在 JDK1.2 時提供.
1 繼承體系
- 正如你所見,此類不繼承,不實作任何接口或者類.開箱即用.
-
啃透JDK源碼系列-Arrays核心源碼解析0 前言1 繼承體系2 構造方法3 屬性4 複制5 toString6 equals7 asList8 hashCode9 總結
2 構造方法
- private 修飾,這意味着Arrays類不能被執行個體化
-
啃透JDK源碼系列-Arrays核心源碼解析0 前言1 繼承體系2 構造方法3 屬性4 複制5 toString6 equals7 asList8 hashCode9 總結
3 屬性
- 最小數組長度,低于該最小數組長度,并行排序算法将不會進一步劃分排序任務。 使用較小的大小通常會導緻跨任務的記憶體争用,進而導緻并行加速的可能性不大
-
啃透JDK源碼系列-Arrays核心源碼解析0 前言1 繼承體系2 構造方法3 屬性4 複制5 toString6 equals7 asList8 hashCode9 總結 - 調整參數:清單大小等于或小于該清單大小的插入排序優先于 mergesort。在将來的 JDK 版本中會被删除。
-
啃透JDK源碼系列-Arrays核心源碼解析0 前言1 繼承體系2 構造方法3 屬性4 複制5 toString6 equals7 asList8 hashCode9 總結
4 複制
4.1 Arrays#copyOf
複制指定的數組,截斷或填充零(如果需要),以使副本具有指定的長度。
- 對于在原始數組和副本中均有效的所有索引,兩個數組将包含相同的值
-
對于在副本中有效但在原始副本中無效的任何索引,副本将包含0
隻有當指定長度大于原始數組的長度時,此類索引才會存在
從源碼中可以看到 Arrays 的拷貝方法,實際上最終調用的還是 System.arraycopy 這個本地方法。
4.2 System#copyOf
從指定的源數組(從指定位置開始)複制數組到目标數組的指定位置。數組元素的子序列從src引用的源數組複制到dest引用的目标數組。複制的元素數等于length參數。将源數組中 srcPos 到 srcPos+length-1 位置的分量分别複制到目标數組的 destPos 到 destPos+length-1 位置
如果src和dest參數引用相同的數組對象,則執行複制,就好像首先将srcPos到 srcPos+length-1 位置上的元素複制到具有 length 個元素的臨時數組,然後将臨時數組的内容通過目标數組的 destPos+length-1 複制到位置destPos。
如果dest為null,則抛出NullPointerException。
如果src為null,則抛出NullPointerException,并且不修改目标數組。
如果滿足以下任一條件,則将引發ArrayStoreException并且不會修改目标:
src參數引用的對象不是數組
dest參數引用的對象不是數組。
src參數和dest參數引用其元素類型為不同基本類型的數組。
src參數引用具有原始元素類型的數組,而dest參數引用具有引用元素類型的數組
src參數引用具有引用元素類型的數組,而dest參數引用具有原始元素類型的數組
如果滿足以下任一條件,則将抛出IndexOutOfBoundsException,并且不會修改目标:
srcPos參數為負。
destPos參數為負。
length參數為負
srcPos + length大于源數組的長度src.length
destPos + length大于目标數組的長度dest.length
5 toString
數組列印
即通過 StringBuilder将數組内容拼接列印出來。
注意此處的Arrays.toString()方法是Arrays類自己定義實作的靜态方法,而不是Object的toString()方法。
6 equals
數組相同判斷
- 就是對數組中對應元素分别進行比較是否相同
-
啃透JDK源碼系列-Arrays核心源碼解析0 前言1 繼承體系2 構造方法3 屬性4 複制5 toString6 equals7 asList8 hashCode9 總結 - 示例:注意與 Objects中的equals方法不同
-
啃透JDK源碼系列-Arrays核心源碼解析0 前言1 繼承體系2 構造方法3 屬性4 複制5 toString6 equals7 asList8 hashCode9 總結
7 asList
将數組轉為List,該方法與集合的toArray方法一起充當了建構數組和集合之間的橋梁.
該方法還提供了一種很便捷的方法來建立一個初始化大小的清單,該清單初始化包含幾個元素:
注意,此處傳回的 ArrayList 并非常用的 java.util.ArrayList,而是 Arrays 的一個靜态内部類
- 該内部類中沒有add和remove方法,不支援添加和移除等操作。
8 hashCode
擷取數組的hashCode值,該值是基于數組的每一個元素的hashCode來實作的。一般來說,hashCode方法隻計算到數組的第一層,如果數組中還内嵌數組,deepHashCode方法則會一直遞歸調用到數組無法再拆分為止。
9 總結
Arrays 是 JDK 專為友善操作數組提供的工具類.大家務必搞懂,如果有任何疑惑及感想,歡迎評論區留言!